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

Side by Side Diff: ui/compositor/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: rebase to master 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/compositor/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 "cc/output/software_frame_data.h"
14 #include "content/browser/compositor/software_layer_mac.h" 13 #include "third_party/skia/include/core/SkCanvas.h"
15 #include "content/common/gpu/surface_handle_types_mac.h"
16 #include "content/public/browser/context_factory.h"
17 #include "ui/base/cocoa/animation_utils.h" 14 #include "ui/base/cocoa/animation_utils.h"
15 #include "ui/compositor/mac/io_surface_layer_mac.h"
16 #include "ui/compositor/mac/surface_handle_types_mac.h"
18 #include "ui/gfx/geometry/dip_util.h" 17 #include "ui/gfx/geometry/dip_util.h"
19 #include "ui/gl/scoped_cgl.h" 18 #include "ui/gl/scoped_cgl.h"
20 19
21 namespace content { 20 namespace ui {
22 namespace { 21 namespace {
23 22
24 typedef std::map<gfx::AcceleratedWidget,AcceleratedWidgetMac*> 23 typedef std::map<gfx::AcceleratedWidget,AcceleratedWidgetMac*>
25 WidgetToHelperMap; 24 WidgetToHelperMap;
26 base::LazyInstance<WidgetToHelperMap> g_widget_to_helper_map; 25 base::LazyInstance<WidgetToHelperMap> g_widget_to_helper_map;
27 26
28 AcceleratedWidgetMac* GetHelperFromAcceleratedWidget( 27 AcceleratedWidgetMac* GetHelperFromAcceleratedWidget(
29 gfx::AcceleratedWidget widget) { 28 gfx::AcceleratedWidget widget) {
30 WidgetToHelperMap::const_iterator found = 29 WidgetToHelperMap::const_iterator found =
31 g_widget_to_helper_map.Pointer()->find(widget); 30 g_widget_to_helper_map.Pointer()->find(widget);
32 // This can end up being accessed after the underlying widget has been 31 // This can end up being accessed after the underlying widget has been
33 // destroyed, but while the ui::Compositor is still being destroyed. 32 // destroyed, but while the ui::Compositor is still being destroyed.
34 // Return NULL in these cases. 33 // Return NULL in these cases.
35 if (found == g_widget_to_helper_map.Pointer()->end()) 34 if (found == g_widget_to_helper_map.Pointer()->end())
36 return NULL; 35 return NULL;
37 return found->second; 36 return found->second;
38 } 37 }
39 38
40 } 39 } // namespace
41 40
42 //////////////////////////////////////////////////////////////////////////////// 41 ////////////////////////////////////////////////////////////////////////////////
43 // AcceleratedWidgetMac 42 // AcceleratedWidgetMac
44 43
45 AcceleratedWidgetMac::AcceleratedWidgetMac() 44 AcceleratedWidgetMac::AcceleratedWidgetMac(bool needs_gl_finish_workaround)
46 : view_(NULL) { 45 : view_(NULL),
46 needs_gl_finish_workaround_(needs_gl_finish_workaround) {
47 // Disable the fade-in animation as the layers are added. 47 // Disable the fade-in animation as the layers are added.
48 ScopedCAActionDisabler disabler; 48 ScopedCAActionDisabler disabler;
49 49
50 // Add a flipped transparent layer as a child, so that we don't need to 50 // 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 51 // fiddle with the position of sub-layers -- they will always be at the
52 // origin. 52 // origin.
53 flipped_layer_.reset([[CALayer alloc] init]); 53 flipped_layer_.reset([[CALayer alloc] init]);
54 [flipped_layer_ setGeometryFlipped:YES]; 54 [flipped_layer_ setGeometryFlipped:YES];
55 [flipped_layer_ setAnchorPoint:CGPointMake(0, 0)]; 55 [flipped_layer_ setAnchorPoint:CGPointMake(0, 0)];
56 [flipped_layer_ 56 [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 208 // 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 209 // a layer but it has the wrong scale factor or it was poisoned, re-create the
210 // layer. 210 // layer.
211 bool needs_new_layer = 211 bool needs_new_layer =
212 !io_surface_layer_ || 212 !io_surface_layer_ ||
213 [io_surface_layer_ hasBeenPoisoned] || 213 [io_surface_layer_ hasBeenPoisoned] ||
214 [io_surface_layer_ scaleFactor] != scale_factor; 214 [io_surface_layer_ scaleFactor] != scale_factor;
215 if (needs_new_layer) { 215 if (needs_new_layer) {
216 io_surface_layer_.reset( 216 io_surface_layer_.reset(
217 [[IOSurfaceLayer alloc] initWithClient:this 217 [[IOSurfaceLayer alloc] initWithClient:this
218 withScaleFactor:scale_factor]); 218 withScaleFactor:scale_factor
219 needsGLFinishWorkaround:needs_gl_finish_workaround_]);
219 if (io_surface_layer_) 220 if (io_surface_layer_)
220 [flipped_layer_ addSublayer:io_surface_layer_]; 221 [flipped_layer_ addSublayer:io_surface_layer_];
221 else 222 else
222 LOG(ERROR) << "Failed to create IOSurfaceLayer"; 223 LOG(ERROR) << "Failed to create IOSurfaceLayer";
223 } 224 }
224 225
225 // Open the provided IOSurface. 226 // Open the provided IOSurface.
226 if (io_surface_layer_) { 227 if (io_surface_layer_) {
227 bool result = [io_surface_layer_ gotFrameWithIOSurface:io_surface_id 228 bool result = [io_surface_layer_ gotFrameWithIOSurface:io_surface_id
228 withPixelSize:pixel_size 229 withPixelSize:pixel_size
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 // in the hierarchy. 261 // in the hierarchy.
261 if (old_io_surface_layer != io_surface_layer_) 262 if (old_io_surface_layer != io_surface_layer_)
262 DestroyIOSurfaceLayer(old_io_surface_layer); 263 DestroyIOSurfaceLayer(old_io_surface_layer);
263 264
264 // Remove any different-type layers that this is replacing. 265 // Remove any different-type layers that this is replacing.
265 DestroyCAContextLayer(ca_context_layer_); 266 DestroyCAContextLayer(ca_context_layer_);
266 DestroySoftwareLayer(); 267 DestroySoftwareLayer();
267 } 268 }
268 269
269 void AcceleratedWidgetMac::GotSoftwareFrame( 270 void AcceleratedWidgetMac::GotSoftwareFrame(
270 cc::SoftwareFrameData* frame_data, 271 cc::SoftwareFrameData* frame_data,
piman 2014/11/26 20:58:08 It doesn't look like frame_data is used at all (ex
tapted 2014/11/27 02:50:34 Done. (InProcess doesn't need it either, I even ha
271 float scale_factor, 272 float scale_factor,
272 SkCanvas* canvas) { 273 SkCanvas* canvas) {
273 if (!frame_data || !canvas || !view_) 274 if (!frame_data || !canvas || !view_)
274 return; 275 return;
275 276
276 // Disable the fade-in or fade-out effect if we create or remove layers. 277 // Disable the fade-in or fade-out effect if we create or remove layers.
277 ScopedCAActionDisabler disabler; 278 ScopedCAActionDisabler disabler;
278 279
279 // If there is not a layer for software frames, create one. 280 // If there is not a layer for software frames, create one.
280 if (!software_layer_) { 281 if (!software_layer_) {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 381
381 void AcceleratedWidgetMacGotSoftwareFrame( 382 void AcceleratedWidgetMacGotSoftwareFrame(
382 gfx::AcceleratedWidget widget, 383 gfx::AcceleratedWidget widget,
383 cc::SoftwareFrameData* frame_data, float scale_factor, SkCanvas* canvas) { 384 cc::SoftwareFrameData* frame_data, float scale_factor, SkCanvas* canvas) {
384 AcceleratedWidgetMac* accelerated_widget_mac = 385 AcceleratedWidgetMac* accelerated_widget_mac =
385 GetHelperFromAcceleratedWidget(widget); 386 GetHelperFromAcceleratedWidget(widget);
386 if (accelerated_widget_mac) 387 if (accelerated_widget_mac)
387 accelerated_widget_mac->GotSoftwareFrame(frame_data, scale_factor, canvas); 388 accelerated_widget_mac->GotSoftwareFrame(frame_data, scale_factor, canvas);
388 } 389 }
389 390
390 } // namespace content 391 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698