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

Side by Side Diff: ui/accelerated_widget_mac/accelerated_widget_mac.mm

Issue 1420533005: Mac: Kill lots of AcceleratedWidget code (with fire) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Feedback 2 Created 5 years, 1 month 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 "ui/accelerated_widget_mac/accelerated_widget_mac.h" 5 #include "ui/accelerated_widget_mac/accelerated_widget_mac.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/mac/mac_util.h"
11 #include "base/mac/scoped_cftyperef.h"
10 #include "base/message_loop/message_loop.h" 12 #include "base/message_loop/message_loop.h"
11 #include "base/trace_event/trace_event.h" 13 #include "base/trace_event/trace_event.h"
12 #include "third_party/skia/include/core/SkCanvas.h" 14 #include "third_party/skia/include/core/SkCanvas.h"
13 #include "ui/accelerated_widget_mac/io_surface_layer.h"
14 #include "ui/accelerated_widget_mac/surface_handle_types.h" 15 #include "ui/accelerated_widget_mac/surface_handle_types.h"
15 #include "ui/base/cocoa/animation_utils.h" 16 #include "ui/base/cocoa/animation_utils.h"
16 #include "ui/gfx/geometry/dip_util.h" 17 #include "ui/gfx/geometry/dip_util.h"
17 #include "ui/gl/scoped_cgl.h" 18 #include "ui/gl/scoped_cgl.h"
18 19
20 @interface CALayer (PrivateAPI)
21 - (void)setContentsChanged;
22 @end
23
19 namespace ui { 24 namespace ui {
20 namespace { 25 namespace {
21 26
22 typedef std::map<gfx::AcceleratedWidget,AcceleratedWidgetMac*> 27 typedef std::map<gfx::AcceleratedWidget,AcceleratedWidgetMac*>
23 WidgetToHelperMap; 28 WidgetToHelperMap;
24 base::LazyInstance<WidgetToHelperMap> g_widget_to_helper_map; 29 base::LazyInstance<WidgetToHelperMap> g_widget_to_helper_map;
25 30
26 AcceleratedWidgetMac* GetHelperFromAcceleratedWidget( 31 AcceleratedWidgetMac* GetHelperFromAcceleratedWidget(
27 gfx::AcceleratedWidget widget) { 32 gfx::AcceleratedWidget widget) {
28 WidgetToHelperMap::const_iterator found = 33 WidgetToHelperMap::const_iterator found =
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 } 89 }
85 90
86 void AcceleratedWidgetMac::ResetNSView() { 91 void AcceleratedWidgetMac::ResetNSView() {
87 if (!view_) 92 if (!view_)
88 return; 93 return;
89 94
90 // Disable the fade-out animation as the view is removed. 95 // Disable the fade-out animation as the view is removed.
91 ScopedCAActionDisabler disabler; 96 ScopedCAActionDisabler disabler;
92 97
93 [flipped_layer_ removeFromSuperlayer]; 98 [flipped_layer_ removeFromSuperlayer];
94 DestroyIOSurfaceLayer(io_surface_layer_);
95 DestroyCAContextLayer(ca_context_layer_); 99 DestroyCAContextLayer(ca_context_layer_);
96 DestroySoftwareLayer(); 100 DestroyLocalLayer();
97 101
98 last_swap_size_dip_ = gfx::Size(); 102 last_swap_size_dip_ = gfx::Size();
99 view_ = NULL; 103 view_ = NULL;
100 } 104 }
101 105
102 bool AcceleratedWidgetMac::HasFrameOfSize( 106 bool AcceleratedWidgetMac::HasFrameOfSize(
103 const gfx::Size& dip_size) const { 107 const gfx::Size& dip_size) const {
104 return last_swap_size_dip_ == dip_size; 108 return last_swap_size_dip_ == dip_size;
105 } 109 }
106 110
107 int AcceleratedWidgetMac::GetRendererID() const { 111 int AcceleratedWidgetMac::GetRendererID() const {
108 if (io_surface_layer_)
109 return [io_surface_layer_ rendererID];
110 return 0; 112 return 0;
111 } 113 }
112 114
113 void AcceleratedWidgetMac::GetVSyncParameters( 115 void AcceleratedWidgetMac::GetVSyncParameters(
114 base::TimeTicks* timebase, base::TimeDelta* interval) const { 116 base::TimeTicks* timebase, base::TimeDelta* interval) const {
115 if (view_) { 117 if (view_) {
116 view_->AcceleratedWidgetGetVSyncParameters(timebase, interval); 118 view_->AcceleratedWidgetGetVSyncParameters(timebase, interval);
117 } else { 119 } else {
118 *timebase = base::TimeTicks(); 120 *timebase = base::TimeTicks();
119 *interval = base::TimeDelta(); 121 *interval = base::TimeDelta();
120 } 122 }
121 } 123 }
122 124
123 bool AcceleratedWidgetMac::IsRendererThrottlingDisabled() const { 125 bool AcceleratedWidgetMac::IsRendererThrottlingDisabled() const {
124 if (view_) 126 if (view_)
125 return view_->AcceleratedWidgetShouldIgnoreBackpressure(); 127 return view_->AcceleratedWidgetShouldIgnoreBackpressure();
126 return false; 128 return false;
127 } 129 }
128 130
129 void AcceleratedWidgetMac::BeginPumpingFrames() { 131 void AcceleratedWidgetMac::BeginPumpingFrames() {
130 [io_surface_layer_ beginPumpingFrames];
131 } 132 }
132 133
133 void AcceleratedWidgetMac::EndPumpingFrames() { 134 void AcceleratedWidgetMac::EndPumpingFrames() {
134 [io_surface_layer_ endPumpingFrames];
135 } 135 }
136 136
137 void AcceleratedWidgetMac::GotAcceleratedFrame( 137 void AcceleratedWidgetMac::GotAcceleratedFrame(
138 uint64 surface_handle, 138 uint64 surface_handle,
139 const std::vector<ui::LatencyInfo>& latency_info, 139 const std::vector<ui::LatencyInfo>& latency_info,
140 const gfx::Size& pixel_size, 140 const gfx::Size& pixel_size,
141 float scale_factor, 141 float scale_factor,
142 const gfx::Rect& pixel_damage_rect, 142 const gfx::Rect& pixel_damage_rect,
143 const base::Closure& drawn_callback) { 143 const base::Closure& drawn_callback) {
144 // Record the surface and latency info to use when acknowledging this frame. 144 // Record the surface and latency info to use when acknowledging this frame.
145 DCHECK(accelerated_frame_drawn_callback_.is_null()); 145 DCHECK(accelerated_frame_drawn_callback_.is_null());
146 accelerated_frame_drawn_callback_ = drawn_callback; 146 accelerated_frame_drawn_callback_ = drawn_callback;
147 accelerated_latency_info_.insert(accelerated_latency_info_.end(), 147 accelerated_latency_info_.insert(accelerated_latency_info_.end(),
148 latency_info.begin(), latency_info.end()); 148 latency_info.begin(), latency_info.end());
149 149
150 // If there is no view and therefore no superview to draw into, early-out. 150 // If there is no view and therefore no superview to draw into, early-out.
151 if (!view_) { 151 if (!view_) {
152 AcknowledgeAcceleratedFrame(); 152 AcknowledgeAcceleratedFrame();
153 return; 153 return;
154 } 154 }
155 155
156 // Disable the fade-in or fade-out effect if we create or remove layers. 156 // Disable the fade-in or fade-out effect if we create or remove layers.
157 ScopedCAActionDisabler disabler; 157 ScopedCAActionDisabler disabler;
158 158
159 last_swap_size_dip_ = gfx::ConvertSizeToDIP(scale_factor, pixel_size);
160 switch (GetSurfaceHandleType(surface_handle)) { 159 switch (GetSurfaceHandleType(surface_handle)) {
161 case kSurfaceHandleTypeIOSurface: { 160 case kSurfaceHandleTypeIOSurface: {
162 IOSurfaceID io_surface_id = IOSurfaceIDFromSurfaceHandle(surface_handle); 161 IOSurfaceID io_surface_id = IOSurfaceIDFromSurfaceHandle(surface_handle);
163 GotAcceleratedIOSurfaceFrame(io_surface_id, pixel_size, scale_factor); 162 GotAcceleratedIOSurfaceFrame(io_surface_id, pixel_size, scale_factor);
164 break; 163 break;
165 } 164 }
166 case kSurfaceHandleTypeCAContext: { 165 case kSurfaceHandleTypeCAContext: {
167 CAContextID ca_context_id = CAContextIDFromSurfaceHandle(surface_handle); 166 CAContextID ca_context_id = CAContextIDFromSurfaceHandle(surface_handle);
168 GotAcceleratedCAContextFrame(ca_context_id, pixel_size, scale_factor); 167 GotAcceleratedCAContextFrame(ca_context_id, pixel_size, scale_factor);
169 break; 168 break;
170 } 169 }
171 default: 170 default:
172 LOG(ERROR) << "Unrecognized accelerated frame type."; 171 DLOG(ERROR) << "Unrecognized accelerated frame type.";
173 return; 172 return;
174 } 173 }
174
175 AcknowledgeAcceleratedFrame();
175 } 176 }
176 177
177 void AcceleratedWidgetMac::GotAcceleratedCAContextFrame( 178 void AcceleratedWidgetMac::GotAcceleratedCAContextFrame(
178 CAContextID ca_context_id, 179 CAContextID ca_context_id,
179 const gfx::Size& pixel_size, 180 const gfx::Size& pixel_size,
180 float scale_factor) { 181 float scale_factor) {
182 last_swap_size_dip_ = gfx::ConvertSizeToDIP(scale_factor, pixel_size);
183
181 // In the layer is replaced, keep the old one around until after the new one 184 // In the layer is replaced, keep the old one around until after the new one
182 // is installed to avoid flashes. 185 // is installed to avoid flashes.
183 base::scoped_nsobject<CALayerHost> old_ca_context_layer = 186 base::scoped_nsobject<CALayerHost> old_ca_context_layer =
184 ca_context_layer_; 187 ca_context_layer_;
185 188
186 // Create the layer to host the layer exported by the GPU process with this 189 // Create the layer to host the layer exported by the GPU process with this
187 // particular CAContext ID. 190 // particular CAContext ID.
188 if ([ca_context_layer_ contextId] != ca_context_id) { 191 if ([ca_context_layer_ contextId] != ca_context_id) {
189 ca_context_layer_.reset([[CALayerHost alloc] init]); 192 ca_context_layer_.reset([[CALayerHost alloc] init]);
190 [ca_context_layer_ setContextId:ca_context_id]; 193 [ca_context_layer_ setContextId:ca_context_id];
191 [ca_context_layer_ 194 [ca_context_layer_
192 setAutoresizingMask:kCALayerMaxXMargin|kCALayerMaxYMargin]; 195 setAutoresizingMask:kCALayerMaxXMargin|kCALayerMaxYMargin];
193 [flipped_layer_ addSublayer:ca_context_layer_]; 196 [flipped_layer_ addSublayer:ca_context_layer_];
194 } 197 }
195 198
196 // Acknowledge the frame to unblock the compositor immediately (the GPU
197 // process will do any required throttling).
198 AcknowledgeAcceleratedFrame();
199
200 // If this replacing a same-type layer, remove it now that the new layer is 199 // If this replacing a same-type layer, remove it now that the new layer is
201 // in the hierarchy. 200 // in the hierarchy.
202 if (old_ca_context_layer != ca_context_layer_) 201 if (old_ca_context_layer != ca_context_layer_)
203 DestroyCAContextLayer(old_ca_context_layer); 202 DestroyCAContextLayer(old_ca_context_layer);
204 203
205 // Remove any different-type layers that this is replacing. 204 // Remove any different-type layers that this is replacing.
206 DestroyIOSurfaceLayer(io_surface_layer_); 205 DestroyLocalLayer();
207 DestroySoftwareLayer();
208 } 206 }
209 207
210 void AcceleratedWidgetMac::GotAcceleratedIOSurfaceFrame( 208 void AcceleratedWidgetMac::GotAcceleratedIOSurfaceFrame(
211 IOSurfaceID io_surface_id, 209 IOSurfaceID io_surface_id,
212 const gfx::Size& pixel_size, 210 const gfx::Size& pixel_size,
213 float scale_factor) { 211 float scale_factor) {
214 // In the layer is replaced, keep the old one around until after the new one 212 base::ScopedCFTypeRef<IOSurfaceRef> io_surface(
215 // is installed to avoid flashes. 213 IOSurfaceLookup(io_surface_id));
216 base::scoped_nsobject<IOSurfaceLayer> old_io_surface_layer = 214 GotIOSurfaceFrame(io_surface, pixel_size, scale_factor, true);
217 io_surface_layer_;
218
219 // Create or re-create an IOSurface layer if needed. If there already exists
220 // a layer but it has the wrong scale factor or it was poisoned, re-create the
221 // layer.
222 bool needs_new_layer =
223 !io_surface_layer_ ||
224 [io_surface_layer_ hasBeenPoisoned] ||
225 [io_surface_layer_ scaleFactor] != scale_factor;
226 if (needs_new_layer) {
227 io_surface_layer_.reset(
228 [[IOSurfaceLayer alloc] initWithClient:this
229 withScaleFactor:scale_factor
230 needsGLFinishWorkaround:needs_gl_finish_workaround_]);
231 if (io_surface_layer_)
232 [flipped_layer_ addSublayer:io_surface_layer_];
233 else
234 LOG(ERROR) << "Failed to create IOSurfaceLayer";
235 }
236
237 // Open the provided IOSurface.
238 if (io_surface_layer_) {
239 bool result = [io_surface_layer_ gotFrameWithIOSurface:io_surface_id
240 withPixelSize:pixel_size
241 withScaleFactor:scale_factor];
242 if (!result) {
243 DestroyIOSurfaceLayer(io_surface_layer_);
244 LOG(ERROR) << "Failed open IOSurface in IOSurfaceLayer";
245 }
246 }
247
248 // Give a final complaint if anything with the layer's creation went wrong.
249 // This frame will appear blank, the compositor will try to create another,
250 // and maybe that will go better.
251 if (!io_surface_layer_) {
252 LOG(ERROR) << "IOSurfaceLayer is nil, tab will be blank";
253 IOSurfaceLayerHitError();
254 }
255
256 // Make the CALayer draw and set its size appropriately.
257 if (io_surface_layer_) {
258 [io_surface_layer_ gotNewFrame];
259
260 // Set the bounds of the accelerated layer to match the size of the frame.
261 // If the bounds changed, force the content to be displayed immediately.
262 CGRect new_layer_bounds = CGRectMake(
263 0, 0, last_swap_size_dip_.width(), last_swap_size_dip_.height());
264 bool bounds_changed = !CGRectEqualToRect(
265 new_layer_bounds, [io_surface_layer_ bounds]);
266 [io_surface_layer_ setBounds:new_layer_bounds];
267 if (bounds_changed)
268 [io_surface_layer_ setNeedsDisplayAndDisplayAndAck];
269 }
270
271 // If this replacing a same-type layer, remove it now that the new layer is
272 // in the hierarchy.
273 if (old_io_surface_layer != io_surface_layer_)
274 DestroyIOSurfaceLayer(old_io_surface_layer);
275
276 // Remove any different-type layers that this is replacing.
277 DestroyCAContextLayer(ca_context_layer_);
278 DestroySoftwareLayer();
279 } 215 }
280 216
281 void AcceleratedWidgetMac::GotSoftwareFrame(float scale_factor, 217 void AcceleratedWidgetMac::EnsureLocalLayer() {
282 SkCanvas* canvas) { 218 if (!local_layer_) {
283 if (!canvas || !view_) 219 local_layer_.reset([[CALayer alloc] init]);
284 return; 220 // Setting contents gravity is necessary to prevent the layer from being
221 // scaled during dyanmic resizes (especially with devtools open).
222 [local_layer_ setContentsGravity:kCAGravityTopLeft];
223 [flipped_layer_ addSublayer:local_layer_];
224 }
225 }
226
227 void AcceleratedWidgetMac::GotIOSurfaceFrame(
228 base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
229 const gfx::Size& pixel_size,
230 float scale_factor,
231 bool flip_y) {
232 last_swap_size_dip_ = gfx::ConvertSizeToDIP(scale_factor, pixel_size);
285 233
286 // Disable the fade-in or fade-out effect if we create or remove layers. 234 // Disable the fade-in or fade-out effect if we create or remove layers.
287 ScopedCAActionDisabler disabler; 235 ScopedCAActionDisabler disabler;
288 236
289 // If there is not a layer for software frames, create one. 237 // If there is not a layer for local frames, create one.
290 if (!software_layer_) { 238 EnsureLocalLayer();
291 software_layer_.reset([[SoftwareLayer alloc] init]); 239
292 [flipped_layer_ addSublayer:software_layer_]; 240 id new_contents = static_cast<id>(io_surface.get());
241
242 if (new_contents && new_contents == [local_layer_ contents]) {
243 [local_layer_ setContentsChanged];
244 } else {
245 [local_layer_ setContents:new_contents];
293 } 246 }
294 247
295 // Set the software layer to draw the provided canvas. 248 [local_layer_ setBounds:CGRectMake(0, 0, pixel_size.width() / scale_factor,
296 SkImageInfo info; 249 pixel_size.height() / scale_factor)];
297 size_t row_bytes; 250
298 const void* pixels = canvas->peekPixels(&info, &row_bytes); 251 if ([local_layer_ respondsToSelector:(@selector(contentsScale))] &&
299 gfx::Size pixel_size(info.width(), info.height()); 252 [local_layer_ respondsToSelector:(@selector(setContentsScale:))] &&
300 [software_layer_ setContentsToData:pixels 253 [local_layer_ contentsScale] != scale_factor) {
301 withRowBytes:row_bytes 254 DCHECK(base::mac::IsOSLionOrLater());
302 withPixelSize:pixel_size 255 [local_layer_ setContentsScale:scale_factor];
303 withScaleFactor:scale_factor]; 256 }
304 last_swap_size_dip_ = gfx::ConvertSizeToDIP(scale_factor, pixel_size); 257
258 if (flip_y) {
259 [local_layer_ setAnchorPoint:CGPointMake(0, 1)];
260 [local_layer_ setAffineTransform:CGAffineTransformMakeScale(1.0, -1.0)];
261 } else {
262 [local_layer_ setAnchorPoint:CGPointMake(0, 0)];
263 [local_layer_ setAffineTransform:CGAffineTransformMakeScale(1.0, 1.0)];
264 }
305 265
306 // Remove any different-type layers that this is replacing. 266 // Remove any different-type layers that this is replacing.
307 DestroyCAContextLayer(ca_context_layer_); 267 DestroyCAContextLayer(ca_context_layer_);
308 DestroyIOSurfaceLayer(io_surface_layer_);
309 } 268 }
310 269
311 void AcceleratedWidgetMac::DestroyCAContextLayer( 270 void AcceleratedWidgetMac::DestroyCAContextLayer(
312 base::scoped_nsobject<CALayerHost> ca_context_layer) { 271 base::scoped_nsobject<CALayerHost> ca_context_layer) {
313 if (!ca_context_layer) 272 if (!ca_context_layer)
314 return; 273 return;
315 [ca_context_layer removeFromSuperlayer]; 274 [ca_context_layer removeFromSuperlayer];
316 if (ca_context_layer == ca_context_layer_) 275 if (ca_context_layer == ca_context_layer_)
317 ca_context_layer_.reset(); 276 ca_context_layer_.reset();
318 } 277 }
319 278
320 void AcceleratedWidgetMac::DestroyIOSurfaceLayer( 279 void AcceleratedWidgetMac::DestroyLocalLayer() {
321 base::scoped_nsobject<IOSurfaceLayer> io_surface_layer) { 280 if (!local_layer_)
322 if (!io_surface_layer)
323 return; 281 return;
324 [io_surface_layer resetClient]; 282 [local_layer_ removeFromSuperlayer];
325 [io_surface_layer removeFromSuperlayer]; 283 local_layer_.reset();
326 if (io_surface_layer == io_surface_layer_)
327 io_surface_layer_.reset();
328 }
329
330 void AcceleratedWidgetMac::DestroySoftwareLayer() {
331 if (!software_layer_)
332 return;
333 [software_layer_ removeFromSuperlayer];
334 software_layer_.reset();
335 }
336
337 bool AcceleratedWidgetMac::IOSurfaceLayerShouldAckImmediately() const {
338 // If there is no view then the accelerated layer is not in the view
339 // hierarchy and will never draw.
340 if (!view_)
341 return true;
342 return view_->AcceleratedWidgetShouldIgnoreBackpressure();
343 }
344
345 void AcceleratedWidgetMac::IOSurfaceLayerDidDrawFrame() {
346 AcknowledgeAcceleratedFrame();
347 } 284 }
348 285
349 void AcceleratedWidgetMac::AcknowledgeAcceleratedFrame() { 286 void AcceleratedWidgetMac::AcknowledgeAcceleratedFrame() {
350 if (accelerated_frame_drawn_callback_.is_null()) 287 if (accelerated_frame_drawn_callback_.is_null())
351 return; 288 return;
352 accelerated_frame_drawn_callback_.Run(); 289 accelerated_frame_drawn_callback_.Run();
353 accelerated_frame_drawn_callback_.Reset(); 290 accelerated_frame_drawn_callback_.Reset();
354 if (view_) 291 if (view_)
355 view_->AcceleratedWidgetSwapCompleted(accelerated_latency_info_); 292 view_->AcceleratedWidgetSwapCompleted(accelerated_latency_info_);
356 accelerated_latency_info_.clear(); 293 accelerated_latency_info_.clear();
357 } 294 }
358 295
359 void AcceleratedWidgetMac::IOSurfaceLayerHitError() {
360 // Perform all acks that would have been done if the frame had succeeded, to
361 // un-block the compositor and renderer.
362 AcknowledgeAcceleratedFrame();
363
364 // Poison the context being used and request a mulligan.
365 [io_surface_layer_ poisonContextAndSharegroup];
366
367 if (view_)
368 view_->AcceleratedWidgetHitError();
369 }
370
371 void AcceleratedWidgetMacGotAcceleratedFrame( 296 void AcceleratedWidgetMacGotAcceleratedFrame(
372 gfx::AcceleratedWidget widget, uint64 surface_handle, 297 gfx::AcceleratedWidget widget, uint64 surface_handle,
373 const std::vector<ui::LatencyInfo>& latency_info, 298 const std::vector<ui::LatencyInfo>& latency_info,
374 const gfx::Size& pixel_size, 299 const gfx::Size& pixel_size,
375 float scale_factor, 300 float scale_factor,
376 const gfx::Rect& pixel_damage_rect, 301 const gfx::Rect& pixel_damage_rect,
377 const base::Closure& drawn_callback, 302 const base::Closure& drawn_callback,
378 bool* disable_throttling, int* renderer_id, 303 bool* disable_throttling, int* renderer_id,
379 base::TimeTicks* vsync_timebase, base::TimeDelta* vsync_interval) { 304 base::TimeTicks* vsync_timebase, base::TimeDelta* vsync_interval) {
380 AcceleratedWidgetMac* accelerated_widget_mac = 305 AcceleratedWidgetMac* accelerated_widget_mac =
381 GetHelperFromAcceleratedWidget(widget); 306 GetHelperFromAcceleratedWidget(widget);
382 if (accelerated_widget_mac) { 307 if (accelerated_widget_mac) {
383 accelerated_widget_mac->GotAcceleratedFrame( 308 accelerated_widget_mac->GotAcceleratedFrame(
384 surface_handle, latency_info, pixel_size, scale_factor, 309 surface_handle, latency_info, pixel_size, scale_factor,
385 pixel_damage_rect, drawn_callback); 310 pixel_damage_rect, drawn_callback);
386 *disable_throttling = 311 *disable_throttling =
387 accelerated_widget_mac->IsRendererThrottlingDisabled(); 312 accelerated_widget_mac->IsRendererThrottlingDisabled();
388 *renderer_id = accelerated_widget_mac->GetRendererID(); 313 *renderer_id = accelerated_widget_mac->GetRendererID();
389 accelerated_widget_mac->GetVSyncParameters(vsync_timebase, vsync_interval); 314 accelerated_widget_mac->GetVSyncParameters(vsync_timebase, vsync_interval);
390 } else { 315 } else {
391 *disable_throttling = false; 316 *disable_throttling = false;
392 *renderer_id = 0; 317 *renderer_id = 0;
393 *vsync_timebase = base::TimeTicks(); 318 *vsync_timebase = base::TimeTicks();
394 *vsync_interval = base::TimeDelta(); 319 *vsync_interval = base::TimeDelta();
395 } 320 }
396 } 321 }
397 322
398 void AcceleratedWidgetMacGotSoftwareFrame( 323 void AcceleratedWidgetMacGotIOSurfaceFrame(
399 gfx::AcceleratedWidget widget, float scale_factor, SkCanvas* canvas) { 324 gfx::AcceleratedWidget widget,
325 base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
326 const gfx::Size& pixel_size,
327 float scale_factor,
328 bool flip_y) {
400 AcceleratedWidgetMac* accelerated_widget_mac = 329 AcceleratedWidgetMac* accelerated_widget_mac =
401 GetHelperFromAcceleratedWidget(widget); 330 GetHelperFromAcceleratedWidget(widget);
402 if (accelerated_widget_mac) 331 if (accelerated_widget_mac) {
403 accelerated_widget_mac->GotSoftwareFrame(scale_factor, canvas); 332 accelerated_widget_mac->GotIOSurfaceFrame(io_surface, pixel_size,
333 scale_factor, flip_y);
334 }
404 } 335 }
405 336
406 } // namespace ui 337 } // namespace ui
OLDNEW
« no previous file with comments | « ui/accelerated_widget_mac/accelerated_widget_mac.gyp ('k') | ui/accelerated_widget_mac/io_surface_layer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698