OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #include "content/browser/renderer_host/compositing_iosurface_layer_mac.h" | 5 #include "content/browser/renderer_host/compositing_iosurface_layer_mac.h" |
6 | 6 |
7 #include <CoreFoundation/CoreFoundation.h> | 7 #include <CoreFoundation/CoreFoundation.h> |
8 #include <OpenGL/gl.h> | 8 #include <OpenGL/gl.h> |
9 | 9 |
10 #include "base/mac/mac_util.h" | 10 #include "base/mac/mac_util.h" |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
95 | 95 |
96 void CompositingIOSurfaceLayerHelper::DidDraw(bool success) { | 96 void CompositingIOSurfaceLayerHelper::DidDraw(bool success) { |
97 needs_display_ = false; | 97 needs_display_ = false; |
98 AckPendingFrame(success); | 98 AckPendingFrame(success); |
99 } | 99 } |
100 | 100 |
101 void CompositingIOSurfaceLayerHelper::AckPendingFrame(bool success) { | 101 void CompositingIOSurfaceLayerHelper::AckPendingFrame(bool success) { |
102 if (!has_pending_frame_) | 102 if (!has_pending_frame_) |
103 return; | 103 return; |
104 has_pending_frame_ = false; | 104 has_pending_frame_ = false; |
105 client_->AcceleratedLayerDidDrawFrame(success); | 105 if (success) |
106 client_->AcceleratedLayerDidDrawFrame(); | |
107 else | |
108 client_->AcceleratedLayerHitError(); | |
106 // A trace value of 0 indicates that there is no longer a pending swap ack. | 109 // A trace value of 0 indicates that there is no longer a pending swap ack. |
107 TRACE_COUNTER_ID1("browser", "PendingSwapAck", this, 0); | 110 TRACE_COUNTER_ID1("browser", "PendingSwapAck", this, 0); |
108 } | 111 } |
109 | 112 |
110 void CompositingIOSurfaceLayerHelper::SetNeedsDisplayAndDisplayAndAck() { | 113 void CompositingIOSurfaceLayerHelper::SetNeedsDisplayAndDisplayAndAck() { |
111 // Drawing using setNeedsDisplay and displayIfNeeded will result in | 114 // Drawing using setNeedsDisplay and displayIfNeeded will result in |
112 // subsequent canDrawInCGLContext callbacks getting dropped, and jerky | 115 // subsequent canDrawInCGLContext callbacks getting dropped, and jerky |
113 // animation. Disable asynchronous drawing before issuing these calls as a | 116 // animation. Disable asynchronous drawing before issuing these calls as a |
114 // workaround. | 117 // workaround. |
115 // http://crbug.com/395827 | 118 // http://crbug.com/395827 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
167 } | 170 } |
168 | 171 |
169 - (content::CompositingIOSurfaceContext*)context { | 172 - (content::CompositingIOSurfaceContext*)context { |
170 return context_.get(); | 173 return context_.get(); |
171 } | 174 } |
172 | 175 |
173 - (id)initWithIOSurface:(scoped_refptr<content::CompositingIOSurfaceMac>) | 176 - (id)initWithIOSurface:(scoped_refptr<content::CompositingIOSurfaceMac>) |
174 iosurface | 177 iosurface |
175 withScaleFactor:(float)scale_factor | 178 withScaleFactor:(float)scale_factor |
176 withClient:(content::CompositingIOSurfaceLayerClient*)client { | 179 withClient:(content::CompositingIOSurfaceLayerClient*)client { |
180 DCHECK(iosurface); | |
177 if (self = [super init]) { | 181 if (self = [super init]) { |
178 helper_.reset(new content::CompositingIOSurfaceLayerHelper(client, self)); | 182 helper_.reset(new content::CompositingIOSurfaceLayerHelper(client, self)); |
179 | 183 |
180 iosurface_ = iosurface; | 184 iosurface_ = iosurface; |
181 context_ = content::CompositingIOSurfaceContext::Get( | 185 context_ = content::CompositingIOSurfaceContext::Get( |
182 content::CompositingIOSurfaceContext::kCALayerContextWindowNumber); | 186 content::CompositingIOSurfaceContext::kCALayerContextWindowNumber); |
183 DCHECK(context_); | 187 if (!context_) { |
188 LOG(ERROR) << "Failed create CompositingIOSurfaceContext"; | |
Ken Russell (switch to Gerrit)
2014/08/07 22:11:44
I wonder whether here and throughout these classes
ccameron
2014/08/07 22:28:24
If anything, I'd like to make these errors more vi
| |
189 [self resetClient]; | |
190 [self release]; | |
191 return nil; | |
192 } | |
184 | 193 |
185 [self setBackgroundColor:CGColorGetConstantColor(kCGColorWhite)]; | 194 [self setBackgroundColor:CGColorGetConstantColor(kCGColorWhite)]; |
186 [self setAnchorPoint:CGPointMake(0, 0)]; | 195 [self setAnchorPoint:CGPointMake(0, 0)]; |
187 // Setting contents gravity is necessary to prevent the layer from being | 196 // Setting contents gravity is necessary to prevent the layer from being |
188 // scaled during dyanmic resizes (especially with devtools open). | 197 // scaled during dyanmic resizes (especially with devtools open). |
189 [self setContentsGravity:kCAGravityTopLeft]; | 198 [self setContentsGravity:kCAGravityTopLeft]; |
190 if ([self respondsToSelector:(@selector(setContentsScale:))]) { | 199 if ([self respondsToSelector:(@selector(setContentsScale:))]) { |
191 [self setContentsScale:scale_factor]; | 200 [self setContentsScale:scale_factor]; |
192 } | 201 } |
193 } | 202 } |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
282 if (helper_) | 291 if (helper_) |
283 helper_->DidDraw(draw_succeeded); | 292 helper_->DidDraw(draw_succeeded); |
284 | 293 |
285 [super drawInCGLContext:glContext | 294 [super drawInCGLContext:glContext |
286 pixelFormat:pixelFormat | 295 pixelFormat:pixelFormat |
287 forLayerTime:timeInterval | 296 forLayerTime:timeInterval |
288 displayTime:timeStamp]; | 297 displayTime:timeStamp]; |
289 } | 298 } |
290 | 299 |
291 @end | 300 @end |
OLD | NEW |