mac: Screen turns blank until reboot
Reported by
mikegood...@gmail.com,
Dec 18 2017
|
|||||||||||||||||
Issue descriptionUserAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7 Example URL: Steps to reproduce the problem: 1. Go to any webpage 2. Go to settings What is the expected behavior? It should show the webpage or settings page or anything. What went wrong? Instead of displaying the wedpage or settings page it shows a blank screen. Most of the time a white color, sometimes all black. Does it occur on multiple sites: Yes Is it a problem with a plugin? N/A Did this work before? Yes I don't know Does this work in other browsers? Yes Chrome version: <Copy from: 'about:version'> Channel: stable OS Version: OS X 10.12.6 Flash Version: I have tried a new profile Tried deleting and reinstalling chrome Tried incognito mode I've googled and found no one with the same problem, especially not being able to access settings.
,
Dec 19 2017
mikegoodrickcontest@ Thanks for the issue. Tested this issue on Mac OS 10.12.6 and Windows 10 using the latest Stable 63.0.3239.108 and Canary 65.0.3299.0 and unable to reproduce the issue by following the below steps. 1. Launched chrome and navigated to Chrome://version, chrome://extensions, Chrome://settings, www.google.com and cannot observe any blank pages on Chrome. All the webpages are rendering correctly and no issues are seen. Attached is the screen cast for reference. Please can you update chrome to the latest Stable, retry the issue and update the thread with the observations. Thanks...
,
Dec 19 2017
Yes. This is the latest version of chrome. 63.0.3239.108 I’m still unable to access any page via the chrome browser. Even the new tab screen where it normally shows my most visited pages is blank. Any ideas on troubleshooting this. I can’t access chrome://settings to change anything. Is there another way to access the settings page?
,
Dec 19 2017
Thank you for providing more feedback. Adding requester "sc00335628@techmahindra.com" to the cc list and removing "Needs-Feedback" label. For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
,
Dec 19 2017
,
Dec 21 2017
Unable to reproduce the issue on Win-10 and mac 10.12.6 using chrome reported version #63.0.3239.108 and latest canary #65.0.3299.0. Observed that pages i.e chrome://settings, yahoo.com, nytimes.com e.t.c rendered without any issues. No blank page is seen. Could someone from Blink>Paint team please have a look into the issue. Thanks...!!
,
Dec 22 2017
I am also seeing this issue. I'm on a MacBook Pro (Retina, 15-inch, Mid 2015) with OS version 10.12.6. It seems like the elements of the page are being positioned correctly but not being shown. As I hover my mouse around the blank page the cursor changes when I'm over a link and when I click I navigate to that link. Also this is reproducing on Stable (63.0.3239.108), Beta (64.0.3282.39), and Canary (65.0.3300.00). I'm moving this to P0 since this bug makes Chrome completely unusable.
,
Dec 22 2017
I can't reproduce this yet but am debugging with amaralp@.
,
Dec 22 2017
Attached are the contents of about:gpu. These were from running Canary (65.0.3300.00) with no flags.
,
Dec 22 2017
I found a person next to me who has the exact same model of computer with the exact same OS version. Does not reproduce for them.
,
Dec 22 2017
@bug reporter: please restart your computer, that may fix the issue. I think it is related to a broken GPU state.
,
Dec 22 2017
Yes @amaralp this is exactly what is happening. I've restarted my computer, reset PRAM. Even reinstalled the OS. Nothing is working.
,
Dec 27 2017
I had this problem as well, and the GPU suspicion seems correct because I am able to work around this problem by launching Chrome from the command line with --disable-gpu. Happy to post chrome:gpu output as well, provided Chrome will render it with --disable-gpu omitted. (I have not yet restarted as mikegood noted, but will do so shortly and report back). The problem for me occurred mid-session. I left for the holidays, and when I came back, rendered windows were still rendered, but new tabs would no longer render. I installed the latest version, that didn't fix it. Incognito, etc. would not fix it. By launching chrome from the command line, I figured it might have something to do with GPU since the console showed errors like: [88903:775:1227/115849.611744:ERROR:gles2_cmd_decoder.cc(4496)] [.DisplayCompositor-0x7fd05c48d800]GL ERROR :GL_INVALID_FRAMEBUFFER_OPERATION : glDrawElements: framebuffer incomplete [88903:775:1227/115849.611846:ERROR:gles2_cmd_decoder.cc(4496)] [.DisplayCompositor-0x7fd05c48d800]GL ERROR :GL_INVALID_FRAMEBUFFER_OPERATION : glDrawElements: framebuffer incomplete [88903:775:1227/115849.615067:ERROR:gles2_cmd_decoder.cc(4496)] [.DisplayCompositor-0x7fd05c48d800]GL ERROR :GL_INVALID_FRAMEBUFFER_OPERATION : glDrawElements: framebuffer incomplete [88903:775:1227/115849.615139:ERROR:gles2_cmd_decoder.cc(4496)] [.DisplayCompositor-0x7fd05c48d800]GL ERROR :GL_INVALID_FRAMEBUFFER_OPERATION : glDrawElements: framebuffer incomplete [88903:775:1227/115849.615166:ERROR:gles2_cmd_decoder.cc(12104)] [.DisplayCompositor-0x7fd05c48d800]GL ERROR :GL_INVALID_VALUE : glScheduleOverlayPlaneCHROMIUM: unknown texture [88903:775:1227/115849.629687:ERROR:gles2_cmd_decoder.cc(4496)] [.DisplayCompositor-0x7fd05c48d800]GL ERROR :GL_INVALID_FRAMEBUFFER_OPERATION : glDrawElements: framebuffer incomplete [88903:775:1227/115849.629770:ERROR:gles2_cmd_decoder.cc(4496)] [.DisplayCompositor-0x7fd05c48d800]GL ERROR :GL_INVALID_FRAMEBUFFER_OPERATION : glDrawElements: framebuffer incomplete [88903:775:1227/115849.629809:ERROR:gles2_cmd_decoder.cc(4496)] [.DisplayCompositor-0x7fd05c48d800]GL ERROR :GL_INVALID_FRAMEBUFFER_OPERATION : glDrawElements: framebuffer incomplete [88903:775:1227/115849.629930:ERROR:gles2_cmd_decoder.cc(4496)] [.DisplayCompositor-0x7fd05c48d800]GL ERROR :GL_INVALID_FRAMEBUFFER_OPERATION : glDrawElements: framebuffer incomplete [88903:775:1227/115849.629967:ERROR:gles2_cmd_decoder.cc(12104)] [.DisplayCompositor-0x7fd05c48d800]GL ERROR :GL_INVALID_VALUE : glScheduleOverlayPlaneCHROMIUM: unknown texture
,
Dec 27 2017
Restarting seemed to fix it for me, thanks @chrishtr! When I relaunched Chrome from the command line (to see console output) but *without* the --disable-gpu, the previous errors were replaced with the following: [1602:775:1227/123809.165067:ERROR:web_input_event_builders_mac.mm(555)] Not implemented reached in static blink::WebGestureEvent content::WebGestureEventBuilder::Build(NSEvent *, NSView *) However, the pages now rendered. So I quit Chrome again, and relaunched from the "icon" (i.e. as a "normal" user) and confirmed the restart changed the behavior from not displaying to actually displaying. I should have tried to load chrome://gpu before restart but didn't think of it. (My guess is that it would have also loaded blank, but Command-Option-U, Command-A, Command C could have copied the page source). Will do that if it reoccurs and post here.
,
Dec 28 2017
Same problem here. Restarting the macbook fixed the issue. Attaching chrome:gpu content.
,
Jan 5 2018
I also had this issue. Restarting the OS fixed the problem. '--disable-gpu' (before restarting) also worked. Anyway, attached is 'gpu.htm' saved when I had this issue (every page is blank). khan@: View-Source and select All + Copy All does not work. When you come across this problem again, you have to use File - Save Page As (or Command-S) after going to chrome://gpu.
,
Jan 9 2018
about:gpu from #9 shows these logs: [77998:775:1221/155627.674499:ERROR:gl_image_io_surface.mm(293)] : Error in CGLTexImageIOSurface2D: invalid numerical value [77998:775:1221/155627.674611:ERROR:gles2_cmd_decoder.cc(18096)] : [.RenderWorker-0x7fe8b7826600.GpuRasterization]GL ERROR :GL_INVALID_OPERATION : glTexStorage2DImageCHROMIUM: Failed to create or bind GL Image [77998:775:1221/155627.674660:ERROR:gles2_cmd_decoder.cc(12575)] : [.RenderWorker-0x7fe8b7826600.GpuRasterization]GL ERROR :GL_INVALID_VALUE : glSetColorSpaceMetadataCHROMIUM: no image associated with texture It sounds like we're doing bad things?
,
Jan 10 2018
Issue 795858 has been merged into this issue.
,
Jan 10 2018
To summarize so far - all are 10.12.6 - all have Intel GPUs (though various models) - this resolves only by reboot (except for one user who is permanently broken) - this ranges from Chrome 63 through Chrome 65. The reports from #16 and #17 don't have the CGLTexImageIOSurface2D call, but have tons of other invalid framebuffer operation spew. This feels to me like an OS bug -- the GL driver getting into some sort of persistent bad state -- I don't think anything else can explain persistence across Chrome restarts. Is there anyone in MTV or SFO who can reproduce this semi-reliably?
,
Jan 10 2018
Also, any users affected by this: If you kill the Chrome GPU Process (in Chrome's task manager) 3 times, it will take you to software mode, which should still display.
,
Jan 10 2018
The issue has not occurred again, if it does will report back.
,
Jan 10 2018
Context i had reported the issue on https://bugs.chromium.org/p/chromium/issues/detail?id=795858&desc=2 Which has been merged with this.
,
Jan 12 2018
,
Jan 12 2018
Issue 801483 has been merged into this issue.
,
Jan 31 2018
vmiura is currently seeing this issue. When running with --disable-gpu, we get the error: In AcceleratedWidgetMac::UpdateCALayerTree IOSurfaceLookupFromMachPort fails with the DLOG "Unable to open IOSurface for frame." When running without --disable-gpu, we get the DCHECK: In GpuMemoryBufferFactoryIOSurface::CreateAnonymousImage IOSurfaceLookupFromMachPort fails and we DCHECK immediately thereafter I suspect that in non-DCHECK builds, this becomes "Error in CGLTexImageIOSurface2D: invalid numerical value because we pass nullptr to CGLTexImageIOSurface2D
,
Jan 31 2018
+rsesek for mach wizardry. The sequence of events we see is as follows, **all in the same process**. We see this in two forms -- one in the browser and one in the GPU process. 1. We call IOSurface. It succeeds (if it failed we would have spewed an error) 2. We call IOSurfaceCreateMachPort We **DO NOT** check if this succeeds -- it has no error code, it just returns a port 3. We call IOSurfaceLookupFromMachPort This FAILS vmiura@ is currently testing a local build to see if IOSurfaceCreateMachPort is returning an invalid handle
,
Jan 31 2018
Patch to test is:
diff --git a/components/viz/service/display_embedder/software_output_device_mac.cc b/components/viz/service/display_embedder/software_output_device_mac.cc
index b256bf2d60f7..39f5a7a79815 100644
--- a/components/viz/service/display_embedder/software_output_device_mac.cc
+++ b/components/viz/service/display_embedder/software_output_device_mac.cc
@@ -185,6 +185,7 @@ void SoftwareOutputDeviceMac::EndPaint() {
ca_layer_params.pixel_size = pixel_size_;
ca_layer_params.io_surface_mach_port.reset(
IOSurfaceCreateMachPort(current_paint_buffer_->io_surface));
+ DCHECK(ca_layer_params.io_surface_mach_port);
ui::CALayerFrameSink* ca_layer_frame_sink =
ui::CALayerFrameSink::FromAcceleratedWidget(widget_);
if (ca_layer_frame_sink) {
diff --git a/gpu/ipc/client/gpu_memory_buffer_impl_io_surface.cc b/gpu/ipc/client/gpu_memory_buffer_impl_io_surface.cc
index 40e592b900b8..956f83d5d969 100644
--- a/gpu/ipc/client/gpu_memory_buffer_impl_io_surface.cc
+++ b/gpu/ipc/client/gpu_memory_buffer_impl_io_surface.cc
@@ -85,6 +85,7 @@ base::Closure GpuMemoryBufferImplIOSurface::AllocateForTesting(
handle->type = gfx::IO_SURFACE_BUFFER;
handle->id = kBufferId;
handle->mach_port.reset(IOSurfaceCreateMachPort(io_surface));
+ DCHECK(handle->mach_port);
return base::Bind(&NoOp);
}
diff --git a/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc b/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc
index f502262d4c13..3b36619458a3 100644
--- a/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc
+++ b/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc
@@ -54,6 +54,7 @@ GpuMemoryBufferFactoryIOSurface::CreateGpuMemoryBuffer(
handle.type = gfx::IO_SURFACE_BUFFER;
handle.id = id;
handle.mach_port.reset(IOSurfaceCreateMachPort(io_surface));
+ DCHECK(handle.mach_port);
return handle;
}
diff --git a/gpu/ipc/service/image_transport_surface_overlay_mac.mm b/gpu/ipc/service/image_transport_surface_overlay_mac.mm
index 8cad9b07e041..8281cdaeb187 100644
--- a/gpu/ipc/service/image_transport_surface_overlay_mac.mm
+++ b/gpu/ipc/service/image_transport_surface_overlay_mac.mm
@@ -228,6 +228,7 @@ void IOSurfaceContextNoOp(scoped_refptr<ui::IOSurfaceContext>) {
if (io_surface) {
params.ca_layer_params.io_surface_mach_port.reset(
IOSurfaceCreateMachPort(io_surface));
+ DCHECK(params.ca_layer_params.io_surface_mach_port);
}
}
params.ca_layer_params.pixel_size = pixel_size_;
,
Jan 31 2018
,
Jan 31 2018
Update to #27. The sequence is 1. We call IOSurfaceCreate. It succeeds (if it failed we would have spewed an error) 2. We call IOSurfaceCreateMachPort This returns a non-null mach port 3. We call IOSurfaceLookupFromMachPort This FAILS -- it returns nullptr This is a "should never possibly ever fail" sequence of calls. Failing 1 is okay, but failing 2 and 3 should never happen. I'll add CHECKs to see how often "should never possibly ever happen" ends up happening in practice. The next question will be "why is this happening".
,
Jan 31 2018
Of note is that we can avoid this sequence of calls in GpuMemoryBufferFactoryIOSurface::CreateAnonymousImage. I see these reports as far back as Chrome 63, and we only started using anonymous images heavily in r512615, which is Chrome 64 (sunnyps please verify).
,
Jan 31 2018
#31 Yeah, that's the right commit and it landed in 64.0.3254.0.
,
Jan 31 2018
Does this only happen if IOSurfaceLookupFromMachPort is called in another process? Does testing with --single-process or --in-process-gpu help?
,
Jan 31 2018
This patch skips the mach-port-roundtrip:
diff --git a/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc b/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc
index f502262d4c13..82a9e7a935cc 100644
--- a/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc
+++ b/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc
@@ -54,6 +54,7 @@ GpuMemoryBufferFactoryIOSurface::CreateGpuMemoryBuffer(
handle.type = gfx::IO_SURFACE_BUFFER;
handle.id = id;
handle.mach_port.reset(IOSurfaceCreateMachPort(io_surface));
+ DCHECK(handle.mach_port);
return handle;
}
@@ -109,17 +110,17 @@ GpuMemoryBufferFactoryIOSurface::CreateAnonymousImage(const gfx::Size& size,
bool* is_cleared) {
// Note that the child id doesn't matter since the texture will never be
// directly exposed to other processes, only via a mailbox.
- gfx::GpuMemoryBufferHandle handle = CreateGpuMemoryBuffer(
- gfx::GpuMemoryBufferId(next_anonymous_image_id_++), size, format, usage,
- kAnonymousClientId, gpu::kNullSurfaceHandle);
-
- base::ScopedCFTypeRef<IOSurfaceRef> io_surface;
- io_surface.reset(IOSurfaceLookupFromMachPort(handle.mach_port.get()));
- DCHECK_NE(nullptr, io_surface.get());
+ base::ScopedCFTypeRef<IOSurfaceRef> io_surface(
+ gfx::CreateIOSurface(size, format, false));
+ if (!io_surface) {
+ DLOG(ERROR) << "Failed to allocate IOSurface for CreateAnonymousImage.";
+ return scoped_refptr<gl::GLImage>();
+ }
+ gfx::GpuMemoryBufferId buffer_id(next_anonymous_image_id_++);
scoped_refptr<gl::GLImageIOSurface> image(
gl::GLImageIOSurface::Create(size, internalformat));
- if (!image->Initialize(io_surface.get(), handle.id, format)) {
+ if (!image->Initialize(io_surface.get(), buffer_id, format)) {
DLOG(ERROR) << "Failed to initialize anonymous GLImage.";
return scoped_refptr<gl::GLImage>();
}
,
Jan 31 2018
Related to issue 574014, where we saw that clients would fail to open service-provided mach ports. For that issue there exists a clusterfuzz repro.
,
Jan 31 2018
The patch in #34 works with GPU rasterization enabled. With --disable-gpu-raster, we are still failing -- but in the Renderer process. I suspect getting the IOSurface from the mach port on the Renderer side is failing.
,
Jan 31 2018
Thanks! I have a patch to trigger crashes to give us some visibility into this on Canary. I'll be able to refine this from there. I am starting to feel that we should create anonymous images and use glTexSubImage for one-copy -- it may even end up being more efficient than zero-copy.
,
Jan 31 2018
The following patch landed against this bug, but I forgot to include the bug # Add CHECKs to calls to IOSurfaceLookupFromMachPort When allocating an anonymous IOSurface-backed GLImage, we have the sequence of calls - IOSurfaceCreate - IOSurfaceCreateMachPort - IOSurfaceRelease (implicitly in ScopedCFTypeRef<IOSurfaceRef>) - IOSurfaceLookupFromMachPort The final call persistently fails on some machines. This adds a CHECK when that call fails, so we can assess how often it occurs in the wild. This also adds a call to IOSurfaceCreateMachPort and IOSurfaceLookupFromMachPort before the implicit IOSurfaceRelease, to see if this may be the result of a reference counting bug. Add lots more LOG(ERROR) spew to help further diagnose this. Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel Change-Id: Ie630067759d0bdf096be907986e53afdc632b15d
,
Jan 31 2018
I've attached a stand-alone app which does - IOSurfaceCreate (to create surface A) - IOSurfaceCreateMachPort (on surface A) - IOSurfaceLookupFromMachPort (to create surface B) and the call to IOSurfaceLookupFromMachPort has failed on vmiura's machine. This indicates that something really terrible is going on on the machine -- that sequence of calls should not fail. I'll file a radar and follow up with Apple.
,
Jan 31 2018
What macOS version was that on? It may be helpful is to run your test program with `sudo dtruss -a /test/program` to get return values from all system calls. That could shed light on any potential port creation error code.
,
Jan 31 2018
,
Feb 2 2018
These were all reported on 10.12.6 But ... the crash reports are rolling in for the added CHECKs, and there are lots of reports of IOSurfaceCreate,IOSurfaceCreateMachPort,IOSurfaceLookupFromMachPort failing. They're coming in from 10.11 an 10.12 so far, but we have very few numbers coming in now -- more to follow. I'll revert the CHECK soon, cause it's big enough to impact stability.
,
Feb 2 2018
Users experienced this crash on the following builds: Mac Canary 66.0.3336.0 - 2.03 CPM, 6 reports, 6 clients (signature gpu::GpuMemoryBufferFactoryIOSurface::CreateGpuMemoryBuffer) If this update was incorrect, please add "Fracas-Wrong" label to prevent future updates. - Go/Fracas
,
Mar 12 2018
,
Nov 16
Gentle ping. What was the next action to take after #42?
,
Nov 28
I have left the DumpWithoutCrashings in place [0]. In 70.0.3538.77, which was Stable for ~30 days, has zero instances of this DumpWithoutCrashing. So this seems to have gone away. I'll WontFix. If we start DWCing, the chrome crash triage will file a new bug. [0] https://cs.chromium.org/chromium/src/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc?rcl=2bd4fd8e90cf59edf3b6883ca8cbb55d7e0e8289&l=72 |
|||||||||||||||||
►
Sign in to add a comment |
|||||||||||||||||
Comment 1 by krajshree@chromium.org
, Dec 18 2017