Skip to content
Snippets Groups Projects
  1. Dec 24, 2010
  2. Dec 23, 2010
  3. Dec 22, 2010
    • thakis@chromium.org's avatar
      Mac: Don't hang gpu process if a tab that shares its renderer process with... · b2e52d1a
      thakis@chromium.org authored
      Mac: Don't hang gpu process if a tab that shares its renderer process with other tabs and that has accelerated content and outstanding paints.
      
      The problem was that the renderer process busy-waits on the GPU process to flush all gpu commands on close, and the GPU process waits with processing commands from the renderer until a paint ack arrives from the browser. But since the window is already closed, no paint acks are sent any more.
      
      The fix is to let the browser tell the GPU process when a window is closed, and then let the GPU process not wait for paint acks if the corresponding window has already been closed.
      
      Closed windows are identified by (renderer process id, render view routing id). Identifying closed windows by either surface id or gpu channel stub routing id does not work, because they are both created on the GPU side and sent to the browser asynchronously, so it's possible that a browser tab is closed before the ID arrives from the GPU process – in that case, it can't send the "window closed" message even though the GPU process is already in a state where it needs this event.
      
      BUG=67170
      TEST=
      1.) Go to http://www.chromeexperiments.com/detail/body-browser/?f=webgl , click "Launch Experiment", wait until everything is loaded, close popup. %cpu of gpu process and renderer process should go to 0
      2.) Go to http://www.chromeexperiments.com/detail/body-browser/?f=webgl , click "Launch Experiment", wait until the bar on the left is loaded but the body isn't yet, close popup. %cpu of gpu process and renderer process should go to 0, but it might take a few seconds until the %cpu in the renderer go down (the site decides to parse the XHR data that gets flushed on widget close)
      3.) Go to http://www.chromeexperiments.com/detail/nine-point-five/?f=webgl , click "Launch Experiment", wait until everything is loaded, close popup. %cpu of gpu process and renderer process should go to 0
      4.) Go to http://www.chromeexperiments.com/detail/nine-point-five/?f=webgl , click "Launch Experiment", close popup immediately after the background color changed to light grey. %cpu of gpu process and renderer process should go to 0
      5.) Go to http://www.chromeexperiments.com/detail/nine-point-five/?f=webgl , click "Launch Experiment", close popup immediately. %cpu of gpu process and renderer process should go to 0
      
      Review URL: http://codereview.chromium.org/6076005
      
      git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70000 0039d316-1c4b-4281-b951-d872f2087c98
      b2e52d1a
  4. Dec 21, 2010
  5. Dec 11, 2010
  6. Dec 08, 2010
  7. Dec 07, 2010
  8. Dec 06, 2010
  9. Dec 05, 2010
  10. Dec 02, 2010
  11. Dec 01, 2010
    • apatrick@chromium.org's avatar
      Switched GPU watchdog timeout to be based on main thread's user + kernel time... · 981c1c5d
      apatrick@chromium.org authored
      Switched GPU watchdog timeout to be based on main thread's user + kernel time rather than wall clock time on Windows.
      
      Only on Windows because it is the only platform 58396 appears to be happening on. My latest hairbrained theory is that it is timing out and aborting while Windows boxes are resuming from hypernation. In that case wall clock time might incorporate a lot of I/O time for paging in data from swapfile. This is an attempt to hide that I/O time, counting only active CPU time.
      
      It catches hangs like this:
      
      for (;;) {
      }
      
      and this:
      
      for (;;) {
        Sleep(0);
      }
      
      but not this:
      
      for (;;) {
        Sleep(1000);
      }
      
      because that just makes the thread largely idle. It also does not catch deadlocks.
      
      Also fixed null dereference in GPU watchdog termination code.
      
      BUG=64648, 58396
      TEST=test GPU watchdog locally, try
      
      Review URL: http://codereview.chromium.org/5301007
      
      git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67891 0039d316-1c4b-4281-b951-d872f2087c98
      981c1c5d
  12. Nov 30, 2010
  13. Nov 27, 2010
  14. Nov 26, 2010
    • kbr@google.com's avatar
      Add flow control between renderer and GPU processes, and, on Mac OS X, · 33da8041
      kbr@google.com authored
      between GPU process and browser process. Thanks to Al Patrick for the
      renderer<->GPU flow control mechanism.
      
      This CL prevents the renderer from issuing more OpenGL work than the
      GPU process can execute, and, on the Mac, prevents the combination of
      the renderer and GPU processes from transmitting more frames via
      IOSurfaces from the GPU to the browser process than can be handled by
      the GPU.
      
      This fix causes the renderer to block inside ggl::SwapBuffers() when
      it gets too far ahead. Different strategies can be considered going
      forward, including measuring frame rates in the GPU and renderer
      processes and trying to match them via techniques such as delaying the
      execution of some timers. However, despite the general undesirability
      of blocking the render thread, this fix results in a significant
      performance improvement.
      
      With this fix integrated, a fill-limited test case from Chris Rogers
      displays at 60 FPS instead of 15 FPS on a Mac Pro. Gregg Tavares'
      aquarium from webglsamples.googlecode.com displays at 30 FPS instead
      of 4 or 5 FPS on a MacBook Pro. The frame rates measured at the
      JavaScript level now match the actual frame rate of the browser, where
      previously they were much higher since they were issuing more work
      than the browser could render.
      
      A few other minor OpenGL bugs potentially impacting the correctness of
      the Mac compositor are being fixed as well in this CL.
      
      Verified that WebGL, CSS 3D and YouTube (Core Animation plugin)
      content all work.
      
      BUG=63539
      TEST=none
      
      Review URL: http://codereview.chromium.org/5317007
      
      git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67470 0039d316-1c4b-4281-b951-d872f2087c98
      33da8041
  15. Nov 25, 2010
  16. Nov 24, 2010
  17. Nov 17, 2010
  18. Nov 16, 2010
    • apatrick@chromium.org's avatar
      Call GpuThread::Init before starting the GPU watchdog thread. · 983c33d1
      apatrick@chromium.org authored
      Collecting GPU info was taking enough time to make the GPU watchdog abort the GPU process.
      
      Moved GTK initialization into GpuProcess (but still before gfx::GLContext::InitializeOneOff).
      
      TEST=try
      BUG=none
      
      Review URL: http://codereview.chromium.org/5017004
      
      git-svn-id: svn://svn.chromium.org/chrome/trunk/src@66333 0039d316-1c4b-4281-b951-d872f2087c98
      983c33d1
    • thakis@chromium.org's avatar
      Gpu: Unregister channel name in the gpu process when a channel closes. · cffcdd54
      thakis@chromium.org authored
      The Gpu channel name is derived from the GPU pid and the renderer id. When a render view crashes and is reloaded, a channel with the same pid and renderer id will be created in the gpu process, which causes this check to fail:
      
      [36009:263:2890157912966265:FATAL:/Volumes/Data/thakis/chrome/src/ipc/ipc_channel_posix.cc(108)] Check failed: i == map_.end(). Creating second IPC server (fd 15) for '36009.r2' while first (fd 14) still exists
      Backtrace:
      	0   Chromium Framework                  0x00cafe62 base::debug::StackTrace::StackTrace() + 32
      	1   Chromium Framework                  0x00cc6b20 logging::LogMessage::~LogMessage() + 64
      	2   Chromium Framework                  0x017f6834 IPC::(anonymous namespace)::PipeMap::Insert(std::string const&, int) + 644
      	3   Chromium Framework                  0x017f6887 IPC::AddChannelSocket(std::string const&, int) + 25
      	4   Chromium Framework                  0x00b3efcb GpuChannel::Init() + 103
      	5   Chromium Framework                  0x00b470ff GpuThread::OnEstablishChannel(int) + 407
      	6   Chromium Framework                  0x00b4778d void DispatchToMethod<GpuThread, void (GpuThread::*)(int), int>(GpuThread*, void (GpuThread::*)(int), Tuple1<int> const&) + 65
      	7   Chromium Framework                  0x00b48c52 bool IPC::MessageWithTuple<Tuple1<int> >::Dispatch<GpuThread, void (GpuThread::*)(int)>(IPC::Message const*, GpuThread*, void (GpuThread::*)(int)) + 71
      	8   Chromium Framework                  0x00b472f8 GpuThread::OnControlMessageReceived(IPC::Message const&) + 146
      	9   Chromium Framework                  0x001696f6 ChildThread::OnMessageReceived(IPC::Message const&) + 452
      	10  Chromium Framework                  0x017f9bcc IPC::ChannelProxy::Context::OnDispatchMessage(IPC::Message const&) + 144
      	11  Chromium Framework                  0x017fab64 void DispatchToMethod<IPC::ChannelProxy::Context, void (IPC::ChannelProxy::Context::*)(IPC::Message const&), IPC::Message>(IPC::ChannelProxy::Context*, void (IPC::ChannelProxy::Context::*)(IPC::Message const&), Tuple1<IPC::Message> const&) + 63
      	12  Chromium Framework                  0x017fab9f RunnableMethod<IPC::ChannelProxy::Context, void (IPC::ChannelProxy::Context::*)(IPC::Message const&), Tuple1<IPC::Message> >::Run() + 57
      	13  Chromium Framework                  0x00ccdc39 MessageLoop::RunTask(Task*) + 303
      	14  Chromium Framework                  0x00ccdcf1 MessageLoop::DeferOrRunPendingTask(MessageLoop::PendingTask const&) + 53
      	15  Chromium Framework                  0x00ccdfcf MessageLoop::DoWork() + 253
      	16  Chromium Framework                  0x00d42024 base::MessagePumpCFRunLoopBase::RunWork() + 74
      	17  Chromium Framework                  0x00d42069 base::MessagePumpCFRunLoopBase::RunWorkSource(void*) + 23
      	18  CoreFoundation                      0x96f260fb __CFRunLoopDoSources0 + 1563
      	19  CoreFoundation                      0x96f23bbf __CFRunLoopRun + 1071
      	20  CoreFoundation                      0x96f23094 CFRunLoopRunSpecific + 452
      	21  CoreFoundation                      0x96f22ec1 CFRunLoopRunInMode + 97
      	22  HIToolbox                           0x976c2f9c RunCurrentEventLoopInMode + 392
      	23  HIToolbox                           0x976c2d51 ReceiveNextEventCommon + 354
      	24  HIToolbox                           0x976c2bd6 BlockUntilNextEventMatchingListInMode + 81
      	25  AppKit                              0x920b5a89 _DPSNextEvent + 847
      	26  AppKit                              0x920b52ca -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
      	27  AppKit                              0x9207755b -[NSApplication run] + 821
      	28  Chromium Framework                  0x00d41b66 base::MessagePumpNSApplication::DoRun(base::MessagePump::Delegate*) + 130
      	29  Chromium Framework                  0x00d42155 base::MessagePumpCFRunLoopBase::Run(base::MessagePump::Delegate*) + 175
      	30  Chromium Framework                  0x00cce7db MessageLoop::RunInternal() + 209
      	31  Chromium Framework                  0x00cce7f5 MessageLoop::RunHandler() + 17
      	32  Chromium Framework                  0x00cce859 MessageLoop::Run() + 35
      	33  Chromium Framework                  0x00b466e6 GpuMain(MainFunctionParams const&) + 1123
      	34  Chromium Framework                  0x00008d67 ChromeMain + 4921
      	35  Chromium Helper                     0x00001f52 main + 24
      	36  Chromium Helper                     0x00001f0e start + 54
      	37  ???                                 0x00000003 0x0 + 3
      
      The fix is to unregister the channel-name mapping when the GPU channel goes away.
      
      BUG=55641
      TEST=Go to a gpu-accelerated page. Enter about:crash in omnibox. Reload page. No CHECK should be printed, and the page should reload fine.
      
      Review URL: http://codereview.chromium.org/4979005
      
      git-svn-id: svn://svn.chromium.org/chrome/trunk/src@66304 0039d316-1c4b-4281-b951-d872f2087c98
      cffcdd54
  19. Nov 15, 2010
  20. Nov 10, 2010
  21. Nov 09, 2010
    • kbr@chromium.org's avatar
      Fixed regression in order of initialization on Linux in r65461 causing · a296f535
      kbr@chromium.org authored
      GPU process to crash on startup.
      
      BUG=62581
      TEST=none (ran CSS 3D and WebGL content)
      
      Review URL: http://codereview.chromium.org/4641003
      
      git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65576 0039d316-1c4b-4281-b951-d872f2087c98
      a296f535
    • apatrick@chromium.org's avatar
      - Relanding 61718. · e09cee46
      apatrick@chromium.org authored
      I disabled the GPU watchdog in three new cases:
      - If the OSMesa software renderer is in use. This will disable it on bots.
      - When running on valgrind, whether on a bot or locally.
      - In debug builds
      
      I added a GPU process initialization time to the GPU info.
      
      I moved the GPU initialization code outside the watchdog protection because it
      can take a long time and trigger the watchdog.
      
      I increased the timeout. I set up a field trial with different timeouts to see
      the rate of failure for each period.
      
      Original CL description:
      
      I added a watchdog thread that intermitently checks the main thread can respond
      to tasks posted on its message queue.
      
      I fixed some bugs that prevented GGL from failing when the GPU channel was
      lost.
      
      Added a command line swith to disable the watchdog thread for debugging
      purposes.
      
      TEST=try, local testing of all features
      BUG=none
      
      
      git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65461 0039d316-1c4b-4281-b951-d872f2087c98
      e09cee46
  22. Nov 08, 2010
  23. Nov 05, 2010
  24. Nov 04, 2010
  25. Oct 30, 2010
  26. Oct 28, 2010
Loading