Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1354)

Side by Side Diff: webkit/glue/plugins/webplugin_delegate_impl_mac.mm

Issue 1745018: Clean up initial CA layer setup for Mac Plugins (Closed)
Patch Set: Tweak initialization order a bit more Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webkit/glue/plugins/webplugin_delegate_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import <Cocoa/Cocoa.h> 5 #import <Cocoa/Cocoa.h>
6 #import <QuartzCore/QuartzCore.h> 6 #import <QuartzCore/QuartzCore.h>
7 7
8 #include "webkit/glue/plugins/webplugin_delegate_impl.h" 8 #include "webkit/glue/plugins/webplugin_delegate_impl.h"
9 9
10 #include <string> 10 #include <string>
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 if (instance()->event_model() != NPEventModelCocoa) 365 if (instance()->event_model() != NPEventModelCocoa)
366 return false; 366 return false;
367 window_.type = NPWindowTypeDrawable; 367 window_.type = NPWindowTypeDrawable;
368 // Ask the plug-in for the CALayer it created for rendering content. Have 368 // Ask the plug-in for the CALayer it created for rendering content. Have
369 // the renderer tell the browser to create a "windowed plugin" to host 369 // the renderer tell the browser to create a "windowed plugin" to host
370 // the IOSurface. 370 // the IOSurface.
371 CALayer* layer = nil; 371 CALayer* layer = nil;
372 NPError err = instance()->NPP_GetValue(NPPVpluginCoreAnimationLayer, 372 NPError err = instance()->NPP_GetValue(NPPVpluginCoreAnimationLayer,
373 reinterpret_cast<void*>(&layer)); 373 reinterpret_cast<void*>(&layer));
374 if (!err) { 374 if (!err) {
375 // Create the timer; it will be started when we get a window handle.
376 redraw_timer_.reset(new base::RepeatingTimer<WebPluginDelegateImpl>);
375 layer_ = layer; 377 layer_ = layer;
376 plugin_->BindFakePluginWindowHandle(false);
377 surface_ = new AcceleratedSurface; 378 surface_ = new AcceleratedSurface;
378 surface_->Initialize(NULL, true); 379 surface_->Initialize(NULL, true);
379 renderer_ = [[CARenderer rendererWithCGLContext:surface_->context() 380 renderer_ = [[CARenderer rendererWithCGLContext:surface_->context()
380 options:NULL] retain]; 381 options:NULL] retain];
381 [renderer_ setLayer:layer_]; 382 [renderer_ setLayer:layer_];
382 UpdateAcceleratedSurface(); 383 plugin_->BindFakePluginWindowHandle(false);
383 redraw_timer_.reset(new base::RepeatingTimer<WebPluginDelegateImpl>);
384 // This will start the timer, but only if we are visible.
385 PluginVisibilityChanged();
386 } 384 }
387 break; 385 break;
388 } 386 }
389 default: 387 default:
390 NOTREACHED(); 388 NOTREACHED();
391 break; 389 break;
392 } 390 }
393 391
394 // TODO(stuartmorgan): We need real plugin container visibility information 392 // TODO(stuartmorgan): We need real plugin container visibility information
395 // when the plugin is initialized; for now, assume it's visible. 393 // when the plugin is initialized; for now, assume it's visible.
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 #endif 970 #endif
973 } 971 }
974 972
975 void WebPluginDelegateImpl::PluginVisibilityChanged() { 973 void WebPluginDelegateImpl::PluginVisibilityChanged() {
976 #ifndef NP_NO_CARBON 974 #ifndef NP_NO_CARBON
977 if (instance()->event_model() == NPEventModelCarbon) 975 if (instance()->event_model() == NPEventModelCarbon)
978 UpdateIdleEventRate(); 976 UpdateIdleEventRate();
979 #endif 977 #endif
980 if (instance()->drawing_model() == NPDrawingModelCoreAnimation) { 978 if (instance()->drawing_model() == NPDrawingModelCoreAnimation) {
981 bool plugin_visible = container_is_visible_ && !clip_rect_.IsEmpty(); 979 bool plugin_visible = container_is_visible_ && !clip_rect_.IsEmpty();
982 if (plugin_visible && !redraw_timer_->IsRunning()) { 980 if (plugin_visible && !redraw_timer_->IsRunning() && windowed_handle()) {
983 redraw_timer_->Start( 981 redraw_timer_->Start(
984 base::TimeDelta::FromMilliseconds(kCoreAnimationRedrawPeriodMs), 982 base::TimeDelta::FromMilliseconds(kCoreAnimationRedrawPeriodMs),
985 this, &WebPluginDelegateImpl::DrawLayerInSurface); 983 this, &WebPluginDelegateImpl::DrawLayerInSurface);
986 } else if (!plugin_visible) { 984 } else if (!plugin_visible) {
987 redraw_timer_->Stop(); 985 redraw_timer_->Stop();
988 } 986 }
989 } 987 }
990 } 988 }
991 989
992 #pragma mark - 990 #pragma mark -
993 #pragma mark Core Animation Support 991 #pragma mark Core Animation Support
994 992
995 void WebPluginDelegateImpl::DrawLayerInSurface() { 993 void WebPluginDelegateImpl::DrawLayerInSurface() {
994 // If we haven't plumbed up the surface yet, don't try to draw.
995 if (!windowed_handle())
996 return;
997
996 surface_->MakeCurrent(); 998 surface_->MakeCurrent();
997 999
998 surface_->Clear(window_rect_); 1000 surface_->Clear(window_rect_);
999 1001
1000 [renderer_ beginFrameAtTime:CACurrentMediaTime() timeStamp:NULL]; 1002 [renderer_ beginFrameAtTime:CACurrentMediaTime() timeStamp:NULL];
1001 CGRect layerRect = [layer_ bounds]; 1003 CGRect layerRect = [layer_ bounds];
1002 [renderer_ addUpdateRect:layerRect]; 1004 [renderer_ addUpdateRect:layerRect];
1003 [renderer_ render]; 1005 [renderer_ render];
1004 [renderer_ endFrame]; 1006 [renderer_ endFrame];
1005 1007
(...skipping 16 matching lines...) Expand all
1022 1024
1023 uint64 io_surface_id = surface_->SetSurfaceSize(window_rect_.size()); 1025 uint64 io_surface_id = surface_->SetSurfaceSize(window_rect_.size());
1024 if (io_surface_id) { 1026 if (io_surface_id) {
1025 plugin_->SetAcceleratedSurface(windowed_handle(), 1027 plugin_->SetAcceleratedSurface(windowed_handle(),
1026 window_rect_.width(), 1028 window_rect_.width(),
1027 window_rect_.height(), 1029 window_rect_.height(),
1028 io_surface_id); 1030 io_surface_id);
1029 } 1031 }
1030 } 1032 }
1031 1033
1034 void WebPluginDelegateImpl::set_windowed_handle(
1035 gfx::PluginWindowHandle handle) {
1036 windowed_handle_ = handle;
1037 UpdateAcceleratedSurface();
1038 // Kick off the drawing timer, if necessary.
1039 PluginVisibilityChanged();
1040 }
1041
1032 #pragma mark - 1042 #pragma mark -
1033 #pragma mark Carbon Event support 1043 #pragma mark Carbon Event support
1034 1044
1035 #ifndef NP_NO_CARBON 1045 #ifndef NP_NO_CARBON
1036 void WebPluginDelegateImpl::UpdateDummyWindowBounds( 1046 void WebPluginDelegateImpl::UpdateDummyWindowBounds(
1037 const gfx::Point& plugin_origin) { 1047 const gfx::Point& plugin_origin) {
1038 WindowRef window = reinterpret_cast<WindowRef>(np_cg_context_.window); 1048 WindowRef window = reinterpret_cast<WindowRef>(np_cg_context_.window);
1039 Rect current_bounds; 1049 Rect current_bounds;
1040 GetWindowBounds(window, kWindowContentRgn, &current_bounds); 1050 GetWindowBounds(window, kWindowContentRgn, &current_bounds);
1041 1051
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 return; 1145 return;
1136 } 1146 }
1137 1147
1138 qd_manager_->SetFastPathEnabled(enabled); 1148 qd_manager_->SetFastPathEnabled(enabled);
1139 qd_port_.port = qd_manager_->port(); 1149 qd_port_.port = qd_manager_->port();
1140 WindowlessSetWindow(); 1150 WindowlessSetWindow();
1141 // Send a paint event so that the new buffer gets updated immediately. 1151 // Send a paint event so that the new buffer gets updated immediately.
1142 WindowlessPaint(buffer_context_, clip_rect_); 1152 WindowlessPaint(buffer_context_, clip_rect_);
1143 } 1153 }
1144 #endif // !NP_NO_QUICKDRAW 1154 #endif // !NP_NO_QUICKDRAW
OLDNEW
« no previous file with comments | « webkit/glue/plugins/webplugin_delegate_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698