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

Unified Diff: chrome/browser/renderer_host/accelerated_plugin_view_mac.mm

Issue 6993043: Fix the mac hangup when force-compositing-mode is enabled (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: DisplayLink back in, hopefully found root cause of bug Created 9 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/renderer_host/accelerated_plugin_view_mac.mm
diff --git a/chrome/browser/renderer_host/accelerated_plugin_view_mac.mm b/chrome/browser/renderer_host/accelerated_plugin_view_mac.mm
index 82638b6ba48ace0e12344a09a76e4b2034a0f8c4..45491d616afd8b92993d90bb168dc288e56ac4e5 100644
--- a/chrome/browser/renderer_host/accelerated_plugin_view_mac.mm
+++ b/chrome/browser/renderer_host/accelerated_plugin_view_mac.mm
@@ -16,6 +16,7 @@
@synthesize cachedSize = cachedSize_;
- (CVReturn)getFrameForTime:(const CVTimeStamp*)outputTime {
+ TRACE_EVENT0("browser", "AcceleratedPluginView::getFrameForTime");
// There is no autorelease pool when this method is called because it will be
// called from a background thread.
base::mac::ScopedNSAutoreleasePool pool;
@@ -26,9 +27,12 @@
return kCVReturnSuccess;
}
+ CGLLockContext(cglContext_);
+
[self drawView];
acknowledgedSwapBuffersCount_ = currentSwapBuffersCount;
+ // Locked here because renderWidgetHostView_ is set to NULL on another thread.
Ken Russell (switch to Gerrit) 2011/06/10 01:30:12 Maybe move this comment next to the call to CGLLoc
jbates 2011/06/11 02:00:44 Done.
if (sendAck && renderWidgetHostView_) {
renderWidgetHostView_->AcknowledgeSwapBuffers(
rendererId_,
@@ -37,6 +41,8 @@
acknowledgedSwapBuffersCount_);
}
+ CGLUnlockContext(cglContext_);
+
return kCVReturnSuccess;
}
@@ -155,6 +161,7 @@ static CVReturn DrawOneAcceleratedPluginCallback(
}
- (void)drawRect:(NSRect)rect {
+ TRACE_EVENT0("browser", "AcceleratedPluginView::drawRect");
const NSRect* dirtyRects;
int dirtyRectCount;
[self getRectsBeingDrawn:&dirtyRects count:&dirtyRectCount];
@@ -190,7 +197,9 @@ static CVReturn DrawOneAcceleratedPluginCallback(
NSRectFillList(dirtyRects, dirtyRectCount);
}
+ CGLLockContext(cglContext_);
Ken Russell (switch to Gerrit) 2011/06/10 01:30:12 This is unnecessary. The first thing drawView does
jbates 2011/06/11 02:00:44 I meant to remove the drawView mutex locking, sinc
[self drawView];
+ CGLUnlockContext(cglContext_);
Ken Russell (switch to Gerrit) 2011/06/10 01:30:12 Unnecessary.
}
- (void)rightMouseDown:(NSEvent*)event {
@@ -232,8 +241,8 @@ static CVReturn DrawOneAcceleratedPluginCallback(
[super renewGState];
}
-- (void)lockFocus {
- [super lockFocus];
+- (void)setViewForGL {
+ TRACE_EVENT0("browser", "AcceleratedPluginView::setViewForGL");
// If we're using OpenGL, make sure it is connected and that the display link
// is running.
@@ -251,10 +260,18 @@ static CVReturn DrawOneAcceleratedPluginCallback(
displayLink_, cglContext_, cglPixelFormat_);
CVDisplayLinkStart(displayLink_);
}
+}
+
+- (void)lockFocus {
+ TRACE_EVENT0("browser", "AcceleratedPluginView::lockFocus");
+ [super lockFocus];
+ [self setViewForGL];
[glContext_ makeCurrentContext];
}
- (void)viewWillMoveToWindow:(NSWindow*)newWindow {
+ TRACE_EVENT1("browser", "AcceleratedPluginView::viewWillMoveToWindow",
+ "newWindow", newWindow);
// Stop the display link thread while the view is not visible.
if (newWindow) {
if (displayLink_ && !CVDisplayLinkIsRunning(displayLink_))
@@ -275,6 +292,7 @@ static CVReturn DrawOneAcceleratedPluginCallback(
}
- (void)viewDidHide {
+ TRACE_EVENT0("browser", "AcceleratedPluginView::viewDidHide");
[super viewDidHide];
if ([[self window] respondsToSelector:@selector(underlaySurfaceRemoved)]) {
@@ -283,6 +301,7 @@ static CVReturn DrawOneAcceleratedPluginCallback(
}
- (void)viewDidUnhide {
+ TRACE_EVENT0("browser", "AcceleratedPluginView::viewDidUnhide");
[super viewDidUnhide];
if ([[self window] respondsToSelector:@selector(underlaySurfaceRemoved)]) {
@@ -297,6 +316,7 @@ static CVReturn DrawOneAcceleratedPluginCallback(
}
- (void)setFrameSize:(NSSize)newSize {
+ TRACE_EVENT0("browser", "AcceleratedPluginView::newSize");
[self setCachedSize:newSize];
[super setFrameSize:newSize];
}
@@ -316,6 +336,7 @@ static CVReturn DrawOneAcceleratedPluginCallback(
}
- (void)viewDidMoveToSuperview {
+ TRACE_EVENT0("browser", "AcceleratedPluginView::viewDidMoveToSuperview");
if (![self superview])
[self onRenderWidgetHostViewGone];
}

Powered by Google App Engine
This is Rietveld 408576698