Chromium Code Reviews| Index: chrome/browser/renderer_host/render_widget_host_view_mac.mm |
| =================================================================== |
| --- chrome/browser/renderer_host/render_widget_host_view_mac.mm (revision 56221) |
| +++ chrome/browser/renderer_host/render_widget_host_view_mac.mm (working copy) |
| @@ -173,7 +173,7 @@ |
| } |
| // This is the renderer output callback function |
| -static CVReturn MyDisplayLinkCallback( |
| +static CVReturn DrawOneAcceleratedPluginCallback( |
| CVDisplayLinkRef displayLink, |
| const CVTimeStamp* now, |
| const CVTimeStamp* outputTime, |
| @@ -211,7 +211,8 @@ |
| // Set up a display link to do OpenGL rendering on a background thread. |
| CVDisplayLinkCreateWithActiveCGDisplays(&displayLink_); |
| - CVDisplayLinkSetOutputCallback(displayLink_, &MyDisplayLinkCallback, self); |
| + CVDisplayLinkSetOutputCallback(displayLink_, |
| + &DrawOneAcceleratedPluginCallback, self); |
| CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext( |
| displayLink_, cglContext_, cglPixelFormat_); |
| CVDisplayLinkStart(displayLink_); |
| @@ -433,12 +434,15 @@ |
| } |
| PluginViewMap::iterator it = plugin_views_.find(geom.window); |
| - CHECK(plugin_views_.end() != it); |
| + DCHECK(plugin_views_.end() != it); |
|
Nico
2010/08/19 22:24:22
what's the rationale for replacing these CHECKs wi
Ken Russell (switch to Gerrit)
2010/08/19 22:28:47
Stuart was concerned about the use of CHECK. I cou
stuartmorgan
2010/08/19 22:35:59
From that document:
"Sometimes it is preferable t
|
| + if (plugin_views_.end() == it) { |
| + continue; |
| + } |
| NSRect new_rect([cocoa_view_ RectToNSRect:rect]); |
| [it->second setFrame:new_rect]; |
| [it->second setNeedsDisplay:YES]; |
| - plugin_container_manager_.MovePluginContainer(geom); |
| + plugin_container_manager_.SetPluginContainerGeometry(geom); |
| } |
| } |
| } |
| @@ -589,7 +593,7 @@ |
| // deepest-first ordering. |
| for (NSView* subview in [cocoa_view_ subviews]) { |
| if (![subview isKindOfClass:[RenderWidgetHostViewCocoa class]]) |
| - continue; // Skip plugin views. |
| + continue; // Skip accelerated views. |
| [static_cast<RenderWidgetHostViewCocoa*>(subview) |
| renderWidgetHostViewMac]->ShutdownHost(); |
| @@ -754,10 +758,12 @@ |
| void RenderWidgetHostViewMac::DestroyFakePluginWindowHandle( |
| gfx::PluginWindowHandle window) { |
| PluginViewMap::iterator it = plugin_views_.find(window); |
| - CHECK(plugin_views_.end() != it); |
| + DCHECK(plugin_views_.end() != it); |
| + if (plugin_views_.end() == it) { |
| + return; |
| + } |
| [it->second removeFromSuperview]; |
| plugin_views_.erase(it); |
| - |
| plugin_container_manager_.DestroyFakePluginWindowHandle(window); |
| } |
| @@ -766,9 +772,6 @@ |
| int32 width, |
| int32 height, |
| uint64 io_surface_identifier) { |
| - PluginViewMap::iterator it = plugin_views_.find(window); |
| - CHECK(plugin_views_.end() != it); |
| - |
| plugin_container_manager_.SetSizeAndIOSurface(window, |
| width, |
| height, |
| @@ -793,9 +796,6 @@ |
| int32 width, |
| int32 height, |
| TransportDIB::Handle transport_dib) { |
| - PluginViewMap::iterator it = plugin_views_.find(window); |
| - CHECK(plugin_views_.end() != it); |
| - |
| plugin_container_manager_.SetSizeAndTransportDIB(window, |
| width, |
| height, |
| @@ -805,10 +805,14 @@ |
| void RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped( |
| gfx::PluginWindowHandle window) { |
| PluginViewMap::iterator it = plugin_views_.find(window); |
| - CHECK(plugin_views_.end() != it); |
| - CHECK([it->second isKindOfClass:[AcceleratedPluginView class]]); |
| + DCHECK(plugin_views_.end() != it); |
| + if (plugin_views_.end() == it) { |
| + return; |
| + } |
| + DCHECK([it->second isKindOfClass:[AcceleratedPluginView class]]); |
| - AcceleratedPluginView* view = static_cast<AcceleratedPluginView*>(it->second); |
| + AcceleratedPluginView* view = |
| + static_cast<AcceleratedPluginView*>(it->second); |
| [view setHidden:NO]; |
| [view setSurfaceWasSwapped:YES]; |
| } |
| @@ -817,8 +821,10 @@ |
| CGLContextObj context, gfx::PluginWindowHandle plugin_handle) { |
| // Called on the display link thread. |
| PluginViewMap::iterator it = plugin_views_.find(plugin_handle); |
| - CHECK(plugin_views_.end() != it); |
| - |
| + DCHECK(plugin_views_.end() != it); |
| + if (plugin_views_.end() == it) { |
| + return; |
| + } |
| CGLSetCurrentContext(context); |
| // TODO(thakis): Pixel or view coordinates? |
| NSSize size = [it->second frame].size; |
| @@ -832,7 +838,9 @@ |
| glLoadIdentity(); |
| plugin_container_manager_.Draw( |
| - context, plugin_handle, GetRenderWidgetHost()->is_gpu_rendering_active()); |
| + context, |
| + plugin_handle, |
| + GetRenderWidgetHost()->is_gpu_rendering_active()); |
| } |
| void RenderWidgetHostViewMac::ForceTextureReload() { |
| @@ -1338,11 +1346,6 @@ |
| } |
| if (renderWidgetHostView_->render_widget_host_->is_gpu_rendering_active()) { |
| - // In this mode the accelerated plugin layer is considered to be |
| - // opaque. We do not want its contents to be blended with anything |
| - // underneath it. |
| - acceleratedPluginLayer_.get().opaque = YES; |
| - [acceleratedPluginLayer_.get() setNeedsDisplay]; |
| return; |
| } |
| @@ -1459,15 +1462,6 @@ |
| if (renderWidgetHostView_->whiteout_start_time_.is_null()) |
| renderWidgetHostView_->whiteout_start_time_ = base::TimeTicks::Now(); |
| } |
| - |
| - // If we get here then the accelerated plugin layer is not supposed |
| - // to be considered opaque -- plugins overlay the browser's normal |
| - // painting. |
| - acceleratedPluginLayer_.get().opaque = NO; |
| - |
| - // This helps keep accelerated plugins' output in better sync with the |
| - // window as it resizes. |
| - [acceleratedPluginLayer_.get() setNeedsDisplay]; |
| } |
| - (BOOL)canBecomeKeyView { |
| @@ -2137,15 +2131,15 @@ |
| } |
| - (void)viewDidMoveToWindow { |
| - // If we move into a new window, refresh the frame information. We don't need |
| - // to do it if it was the same window as it used to be in, since that case |
| - // is covered by DidBecomeSelected. |
| - // We only want to do this for real browser views, not popups. |
| if (canBeKeyView_) { |
| NSWindow* newWindow = [self window]; |
| // Pointer comparison only, since we don't know if lastWindow_ is still |
| // valid. |
| if (newWindow) { |
| + // If we move into a new window, refresh the frame information. We |
| + // don't need to do it if it was the same window as it used to be in, |
| + // since that case is covered by DidBecomeSelected. We only want to |
| + // do this for real browser views, not popups. |
| if (newWindow != lastWindow_) { |
| lastWindow_ = newWindow; |
| renderWidgetHostView_->WindowFrameChanged(); |
| @@ -2216,10 +2210,6 @@ |
| } |
| } |
| -- (void)drawAcceleratedPluginLayer { |
| - [acceleratedPluginLayer_.get() setNeedsDisplay]; |
| -} |
| - |
| - (void)cancelComposition { |
| if (!hasMarkedText_) |
| return; |