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

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

Issue 753933002: MacViews: Move content::AcceleratedWidget to new component, ui/accelerated_widget_mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@20141124-MacViews-MoveSoftwareLayerMac-fromcl
Patch Set: gn check Created 6 years 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_ca_layer_tree_mac.h" 5 #include "ui/accelerated_widget_mac/accelerated_widget_mac.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "cc/output/software_frame_data.h"
10 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
11 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
12 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
13 #include "content/browser/compositor/io_surface_layer_mac.h" 12 #include "third_party/skia/include/core/SkCanvas.h"
14 #include "content/browser/compositor/software_layer_mac.h" 13 #include "ui/accelerated_widget_mac/io_surface_layer.h"
15 #include "content/common/gpu/surface_handle_types_mac.h" 14 #include "ui/accelerated_widget_mac/surface_handle_types.h"
16 #include "content/public/browser/context_factory.h"
17 #include "ui/base/cocoa/animation_utils.h" 15 #include "ui/base/cocoa/animation_utils.h"
18 #include "ui/gfx/geometry/dip_util.h" 16 #include "ui/gfx/geometry/dip_util.h"
19 #include "ui/gl/scoped_cgl.h" 17 #include "ui/gl/scoped_cgl.h"
20 18
21 namespace content { 19 namespace ui {
22 namespace { 20 namespace {
23 21
24 typedef std::map<gfx::AcceleratedWidget,AcceleratedWidgetMac*> 22 typedef std::map<gfx::AcceleratedWidget,AcceleratedWidgetMac*>
25 WidgetToHelperMap; 23 WidgetToHelperMap;
26 base::LazyInstance<WidgetToHelperMap> g_widget_to_helper_map; 24 base::LazyInstance<WidgetToHelperMap> g_widget_to_helper_map;
27 25
28 AcceleratedWidgetMac* GetHelperFromAcceleratedWidget( 26 AcceleratedWidgetMac* GetHelperFromAcceleratedWidget(
29 gfx::AcceleratedWidget widget) { 27 gfx::AcceleratedWidget widget) {
30 WidgetToHelperMap::const_iterator found = 28 WidgetToHelperMap::const_iterator found =
31 g_widget_to_helper_map.Pointer()->find(widget); 29 g_widget_to_helper_map.Pointer()->find(widget);
32 // This can end up being accessed after the underlying widget has been 30 // This can end up being accessed after the underlying widget has been
33 // destroyed, but while the ui::Compositor is still being destroyed. 31 // destroyed, but while the ui::Compositor is still being destroyed.
34 // Return NULL in these cases. 32 // Return NULL in these cases.
35 if (found == g_widget_to_helper_map.Pointer()->end()) 33 if (found == g_widget_to_helper_map.Pointer()->end())
36 return NULL; 34 return NULL;
37 return found->second; 35 return found->second;
38 } 36 }
39 37
40 } 38 } // namespace
41 39
42 //////////////////////////////////////////////////////////////////////////////// 40 ////////////////////////////////////////////////////////////////////////////////
43 // AcceleratedWidgetMac 41 // AcceleratedWidgetMac
44 42
45 AcceleratedWidgetMac::AcceleratedWidgetMac() 43 AcceleratedWidgetMac::AcceleratedWidgetMac(bool needs_gl_finish_workaround)
46 : view_(NULL) { 44 : view_(NULL),
45 needs_gl_finish_workaround_(needs_gl_finish_workaround) {
47 // Disable the fade-in animation as the layers are added. 46 // Disable the fade-in animation as the layers are added.
48 ScopedCAActionDisabler disabler; 47 ScopedCAActionDisabler disabler;
49 48
50 // Add a flipped transparent layer as a child, so that we don't need to 49 // Add a flipped transparent layer as a child, so that we don't need to
51 // fiddle with the position of sub-layers -- they will always be at the 50 // fiddle with the position of sub-layers -- they will always be at the
52 // origin. 51 // origin.
53 flipped_layer_.reset([[CALayer alloc] init]); 52 flipped_layer_.reset([[CALayer alloc] init]);
54 [flipped_layer_ setGeometryFlipped:YES]; 53 [flipped_layer_ setGeometryFlipped:YES];
55 [flipped_layer_ setAnchorPoint:CGPointMake(0, 0)]; 54 [flipped_layer_ setAnchorPoint:CGPointMake(0, 0)];
56 [flipped_layer_ 55 [flipped_layer_
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 // Create or re-create an IOSurface layer if needed. If there already exists 207 // Create or re-create an IOSurface layer if needed. If there already exists
209 // a layer but it has the wrong scale factor or it was poisoned, re-create the 208 // a layer but it has the wrong scale factor or it was poisoned, re-create the
210 // layer. 209 // layer.
211 bool needs_new_layer = 210 bool needs_new_layer =
212 !io_surface_layer_ || 211 !io_surface_layer_ ||
213 [io_surface_layer_ hasBeenPoisoned] || 212 [io_surface_layer_ hasBeenPoisoned] ||
214 [io_surface_layer_ scaleFactor] != scale_factor; 213 [io_surface_layer_ scaleFactor] != scale_factor;
215 if (needs_new_layer) { 214 if (needs_new_layer) {
216 io_surface_layer_.reset( 215 io_surface_layer_.reset(
217 [[IOSurfaceLayer alloc] initWithClient:this 216 [[IOSurfaceLayer alloc] initWithClient:this
218 withScaleFactor:scale_factor]); 217 withScaleFactor:scale_factor
218 needsGLFinishWorkaround:needs_gl_finish_workaround_]);
219 if (io_surface_layer_) 219 if (io_surface_layer_)
220 [flipped_layer_ addSublayer:io_surface_layer_]; 220 [flipped_layer_ addSublayer:io_surface_layer_];
221 else 221 else
222 LOG(ERROR) << "Failed to create IOSurfaceLayer"; 222 LOG(ERROR) << "Failed to create IOSurfaceLayer";
223 } 223 }
224 224
225 // Open the provided IOSurface. 225 // Open the provided IOSurface.
226 if (io_surface_layer_) { 226 if (io_surface_layer_) {
227 bool result = [io_surface_layer_ gotFrameWithIOSurface:io_surface_id 227 bool result = [io_surface_layer_ gotFrameWithIOSurface:io_surface_id
228 withPixelSize:pixel_size 228 withPixelSize:pixel_size
(...skipping 30 matching lines...) Expand all
259 // If this replacing a same-type layer, remove it now that the new layer is 259 // If this replacing a same-type layer, remove it now that the new layer is
260 // in the hierarchy. 260 // in the hierarchy.
261 if (old_io_surface_layer != io_surface_layer_) 261 if (old_io_surface_layer != io_surface_layer_)
262 DestroyIOSurfaceLayer(old_io_surface_layer); 262 DestroyIOSurfaceLayer(old_io_surface_layer);
263 263
264 // Remove any different-type layers that this is replacing. 264 // Remove any different-type layers that this is replacing.
265 DestroyCAContextLayer(ca_context_layer_); 265 DestroyCAContextLayer(ca_context_layer_);
266 DestroySoftwareLayer(); 266 DestroySoftwareLayer();
267 } 267 }
268 268
269 void AcceleratedWidgetMac::GotSoftwareFrame( 269 void AcceleratedWidgetMac::GotSoftwareFrame(float scale_factor,
270 cc::SoftwareFrameData* frame_data, 270 SkCanvas* canvas) {
271 float scale_factor, 271 if (!canvas || !view_)
272 SkCanvas* canvas) {
273 if (!frame_data || !canvas || !view_)
274 return; 272 return;
275 273
276 // Disable the fade-in or fade-out effect if we create or remove layers. 274 // Disable the fade-in or fade-out effect if we create or remove layers.
277 ScopedCAActionDisabler disabler; 275 ScopedCAActionDisabler disabler;
278 276
279 // If there is not a layer for software frames, create one. 277 // If there is not a layer for software frames, create one.
280 if (!software_layer_) { 278 if (!software_layer_) {
281 software_layer_.reset([[SoftwareLayer alloc] init]); 279 software_layer_.reset([[SoftwareLayer alloc] init]);
282 [flipped_layer_ addSublayer:software_layer_]; 280 [flipped_layer_ addSublayer:software_layer_];
283 } 281 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 *disable_throttling = 370 *disable_throttling =
373 accelerated_widget_mac->IsRendererThrottlingDisabled(); 371 accelerated_widget_mac->IsRendererThrottlingDisabled();
374 *renderer_id = accelerated_widget_mac->GetRendererID(); 372 *renderer_id = accelerated_widget_mac->GetRendererID();
375 } else { 373 } else {
376 *disable_throttling = false; 374 *disable_throttling = false;
377 *renderer_id = 0; 375 *renderer_id = 0;
378 } 376 }
379 } 377 }
380 378
381 void AcceleratedWidgetMacGotSoftwareFrame( 379 void AcceleratedWidgetMacGotSoftwareFrame(
382 gfx::AcceleratedWidget widget, 380 gfx::AcceleratedWidget widget, float scale_factor, SkCanvas* canvas) {
383 cc::SoftwareFrameData* frame_data, float scale_factor, SkCanvas* canvas) {
384 AcceleratedWidgetMac* accelerated_widget_mac = 381 AcceleratedWidgetMac* accelerated_widget_mac =
385 GetHelperFromAcceleratedWidget(widget); 382 GetHelperFromAcceleratedWidget(widget);
386 if (accelerated_widget_mac) 383 if (accelerated_widget_mac)
387 accelerated_widget_mac->GotSoftwareFrame(frame_data, scale_factor, canvas); 384 accelerated_widget_mac->GotSoftwareFrame(scale_factor, canvas);
388 } 385 }
389 386
390 } // namespace content 387 } // namespace ui
OLDNEW
« no previous file with comments | « ui/accelerated_widget_mac/accelerated_widget_mac.gyp ('k') | ui/accelerated_widget_mac/accelerated_widget_mac_export.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698