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

Side by Side Diff: content/browser/compositor/browser_compositor_view_mac.mm

Issue 334593002: Mac ÜC: Enable back-pressure for the browser compositor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporate review feedback Created 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/compositor/browser_compositor_view_mac.h" 5 #include "content/browser/compositor/browser_compositor_view_mac.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/mac/scoped_cftyperef.h" 8 #include "base/mac/scoped_cftyperef.h"
9 #include "content/browser/compositor/gpu_process_transport_factory.h"
9 #include "content/browser/renderer_host/compositing_iosurface_context_mac.h" 10 #include "content/browser/renderer_host/compositing_iosurface_context_mac.h"
10 #include "content/browser/renderer_host/compositing_iosurface_mac.h" 11 #include "content/browser/renderer_host/compositing_iosurface_mac.h"
11 #include "content/browser/renderer_host/software_layer_mac.h" 12 #include "content/browser/renderer_host/software_layer_mac.h"
12 #include "content/public/browser/context_factory.h" 13 #include "content/public/browser/context_factory.h"
13 #include "ui/base/cocoa/animation_utils.h" 14 #include "ui/base/cocoa/animation_utils.h"
14 #include "ui/gl/scoped_cgl.h" 15 #include "ui/gl/scoped_cgl.h"
15 16
16 @interface BrowserCompositorViewMac (Private) 17 @interface BrowserCompositorViewMac (Private)
17 - (void)layerDidDrawFrame; 18 - (void)layerDidDrawFrame;
18 - (void)gotAcceleratedLayerError; 19 - (void)gotAcceleratedLayerError;
(...skipping 22 matching lines...) Expand all
41 }; 42 };
42 43
43 } // namespace content 44 } // namespace content
44 45
45 46
46 // The default implementation of additions to the NSView interface for browser 47 // The default implementation of additions to the NSView interface for browser
47 // compositing should never be called. Log an error if they are. 48 // compositing should never be called. Log an error if they are.
48 @implementation NSView (BrowserCompositorView) 49 @implementation NSView (BrowserCompositorView)
49 50
50 - (void)gotAcceleratedIOSurfaceFrame:(uint64)surface_handle 51 - (void)gotAcceleratedIOSurfaceFrame:(uint64)surface_handle
52 withOutputSurfaceID:(int)surface_id
51 withPixelSize:(gfx::Size)pixel_size 53 withPixelSize:(gfx::Size)pixel_size
52 withScaleFactor:(float)scale_factor { 54 withScaleFactor:(float)scale_factor {
53 DLOG(ERROR) << "-[NSView gotAcceleratedIOSurfaceFrame] called on " 55 DLOG(ERROR) << "-[NSView gotAcceleratedIOSurfaceFrame] called on "
54 << "non-overriden class."; 56 << "non-overriden class.";
55 } 57 }
56 58
57 - (void)gotSoftwareFrame:(cc::SoftwareFrameData*)frame_data 59 - (void)gotSoftwareFrame:(cc::SoftwareFrameData*)frame_data
58 withScaleFactor:(float)scale_factor 60 withScaleFactor:(float)scale_factor
59 withCanvas:(SkCanvas*)canvas { 61 withCanvas:(SkCanvas*)canvas {
60 DLOG(ERROR) << "-[NSView gotSoftwareFrame] called on non-overridden class."; 62 DLOG(ERROR) << "-[NSView gotSoftwareFrame] called on non-overridden class.";
61 } 63 }
62 64
63 @end // NSView (BrowserCompositorView) 65 @end // NSView (BrowserCompositorView)
64 66
65 @implementation BrowserCompositorViewMac : NSView 67 @implementation BrowserCompositorViewMac : NSView
66 68
67 - (id)initWithSuperview:(NSView*)view { 69 - (id)initWithSuperview:(NSView*)view {
68 if (self = [super init]) { 70 if (self = [super init]) {
71 accelerated_layer_output_surface_id_ = 0;
69 helper_.reset(new content::BrowserCompositorViewMacHelper(self)); 72 helper_.reset(new content::BrowserCompositorViewMacHelper(self));
70 73
71 // Disable the fade-in animation as the layer and view are added. 74 // Disable the fade-in animation as the layer and view are added.
72 ScopedCAActionDisabler disabler; 75 ScopedCAActionDisabler disabler;
73 76
74 // Make this view host a transparent layer. 77 // Make this view host a transparent layer.
75 background_layer_.reset([[CALayer alloc] init]); 78 background_layer_.reset([[CALayer alloc] init]);
76 [background_layer_ setContentsGravity:kCAGravityTopLeft]; 79 [background_layer_ setContentsGravity:kCAGravityTopLeft];
77 [self setLayer:background_layer_]; 80 [self setLayer:background_layer_];
78 [self setWantsLayer:YES]; 81 [self setWantsLayer:YES];
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 142
140 - (void)resetClient { 143 - (void)resetClient {
141 [accelerated_layer_ resetClient]; 144 [accelerated_layer_ resetClient];
142 } 145 }
143 146
144 - (ui::Compositor*)compositor { 147 - (ui::Compositor*)compositor {
145 return compositor_.get(); 148 return compositor_.get();
146 } 149 }
147 150
148 - (void)gotAcceleratedIOSurfaceFrame:(uint64)surface_handle 151 - (void)gotAcceleratedIOSurfaceFrame:(uint64)surface_handle
152 withOutputSurfaceID:(int)surface_id
149 withPixelSize:(gfx::Size)pixel_size 153 withPixelSize:(gfx::Size)pixel_size
150 withScaleFactor:(float)scale_factor { 154 withScaleFactor:(float)scale_factor {
155 DCHECK(!accelerated_layer_output_surface_id_);
156 accelerated_layer_output_surface_id_ = surface_id;
157
151 ScopedCAActionDisabler disabler; 158 ScopedCAActionDisabler disabler;
152 159
153 // If there is already an accelerated layer, but it has the wrong scale 160 // If there is already an accelerated layer, but it has the wrong scale
154 // factor or it was poisoned, remove the old layer and replace it. 161 // factor or it was poisoned, remove the old layer and replace it.
155 base::scoped_nsobject<CompositingIOSurfaceLayer> old_accelerated_layer; 162 base::scoped_nsobject<CompositingIOSurfaceLayer> old_accelerated_layer;
156 if (accelerated_layer_ && ( 163 if (accelerated_layer_ && (
157 [accelerated_layer_ context]->HasBeenPoisoned() || 164 [accelerated_layer_ context]->HasBeenPoisoned() ||
158 [accelerated_layer_ iosurface]->scale_factor() != scale_factor)) { 165 [accelerated_layer_ iosurface]->scale_factor() != scale_factor)) {
159 old_accelerated_layer = accelerated_layer_; 166 old_accelerated_layer = accelerated_layer_;
160 accelerated_layer_.reset(); 167 accelerated_layer_.reset();
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 238
232 // This call can be nested insider ui::Compositor commit calls, and can also 239 // This call can be nested insider ui::Compositor commit calls, and can also
233 // make additional ui::Compositor commit calls. Avoid the potential recursion 240 // make additional ui::Compositor commit calls. Avoid the potential recursion
234 // by acknowledging the frame asynchronously. 241 // by acknowledging the frame asynchronously.
235 [self performSelector:@selector(layerDidDrawFrame) 242 [self performSelector:@selector(layerDidDrawFrame)
236 withObject:nil 243 withObject:nil
237 afterDelay:0]; 244 afterDelay:0];
238 } 245 }
239 246
240 - (void)layerDidDrawFrame { 247 - (void)layerDidDrawFrame {
248 if (!accelerated_layer_output_surface_id_)
249 return;
250
251 content::ImageTransportFactory::GetInstance()->OnSurfaceDisplayed(
252 accelerated_layer_output_surface_id_);
253 accelerated_layer_output_surface_id_ = 0;
241 } 254 }
242 255
243 @end // BrowserCompositorViewMac 256 @end // BrowserCompositorViewMac
OLDNEW
« no previous file with comments | « content/browser/compositor/browser_compositor_view_mac.h ('k') | content/browser/compositor/gpu_process_transport_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698