| OLD | NEW |
| 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 "content/browser/compositor/browser_compositor_ca_layer_tree_mac.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 | 8 |
| 9 #include "cc/output/software_frame_data.h" | 9 #include "cc/output/software_frame_data.h" |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| 11 #include "base/lazy_instance.h" | 11 #include "base/lazy_instance.h" |
| 12 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
| 13 #include "content/browser/compositor/io_surface_layer_mac.h" | 13 #include "content/browser/compositor/io_surface_layer_mac.h" |
| 14 #include "content/browser/compositor/software_layer_mac.h" | 14 #include "content/browser/compositor/software_layer_mac.h" |
| 15 #include "content/browser/renderer_host/dip_util.h" | |
| 16 #include "content/common/gpu/surface_handle_types_mac.h" | 15 #include "content/common/gpu/surface_handle_types_mac.h" |
| 17 #include "content/public/browser/context_factory.h" | 16 #include "content/public/browser/context_factory.h" |
| 18 #include "ui/base/cocoa/animation_utils.h" | 17 #include "ui/base/cocoa/animation_utils.h" |
| 18 #include "ui/gfx/geometry/dip_util.h" |
| 19 #include "ui/gl/scoped_cgl.h" | 19 #include "ui/gl/scoped_cgl.h" |
| 20 | 20 |
| 21 namespace content { | 21 namespace content { |
| 22 namespace { | 22 namespace { |
| 23 | 23 |
| 24 typedef std::map<gfx::AcceleratedWidget,AcceleratedWidgetMac*> | 24 typedef std::map<gfx::AcceleratedWidget,AcceleratedWidgetMac*> |
| 25 WidgetToHelperMap; | 25 WidgetToHelperMap; |
| 26 base::LazyInstance<WidgetToHelperMap> g_widget_to_helper_map; | 26 base::LazyInstance<WidgetToHelperMap> g_widget_to_helper_map; |
| 27 | 27 |
| 28 AcceleratedWidgetMac* GetHelperFromAcceleratedWidget( | 28 AcceleratedWidgetMac* GetHelperFromAcceleratedWidget( |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 | 138 |
| 139 // If there is no view and therefore no superview to draw into, early-out. | 139 // If there is no view and therefore no superview to draw into, early-out. |
| 140 if (!view_) { | 140 if (!view_) { |
| 141 AcknowledgeAcceleratedFrame(); | 141 AcknowledgeAcceleratedFrame(); |
| 142 return; | 142 return; |
| 143 } | 143 } |
| 144 | 144 |
| 145 // Disable the fade-in or fade-out effect if we create or remove layers. | 145 // Disable the fade-in or fade-out effect if we create or remove layers. |
| 146 ScopedCAActionDisabler disabler; | 146 ScopedCAActionDisabler disabler; |
| 147 | 147 |
| 148 last_swap_size_dip_ = ConvertSizeToDIP(scale_factor, pixel_size); | 148 last_swap_size_dip_ = gfx::ConvertSizeToDIP(scale_factor, pixel_size); |
| 149 switch (GetSurfaceHandleType(surface_handle)) { | 149 switch (GetSurfaceHandleType(surface_handle)) { |
| 150 case kSurfaceHandleTypeIOSurface: { | 150 case kSurfaceHandleTypeIOSurface: { |
| 151 IOSurfaceID io_surface_id = IOSurfaceIDFromSurfaceHandle(surface_handle); | 151 IOSurfaceID io_surface_id = IOSurfaceIDFromSurfaceHandle(surface_handle); |
| 152 GotAcceleratedIOSurfaceFrame(io_surface_id, pixel_size, scale_factor); | 152 GotAcceleratedIOSurfaceFrame(io_surface_id, pixel_size, scale_factor); |
| 153 break; | 153 break; |
| 154 } | 154 } |
| 155 case kSurfaceHandleTypeCAContext: { | 155 case kSurfaceHandleTypeCAContext: { |
| 156 CAContextID ca_context_id = CAContextIDFromSurfaceHandle(surface_handle); | 156 CAContextID ca_context_id = CAContextIDFromSurfaceHandle(surface_handle); |
| 157 GotAcceleratedCAContextFrame(ca_context_id, pixel_size, scale_factor); | 157 GotAcceleratedCAContextFrame(ca_context_id, pixel_size, scale_factor); |
| 158 break; | 158 break; |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 | 284 |
| 285 // Set the software layer to draw the provided canvas. | 285 // Set the software layer to draw the provided canvas. |
| 286 SkImageInfo info; | 286 SkImageInfo info; |
| 287 size_t row_bytes; | 287 size_t row_bytes; |
| 288 const void* pixels = canvas->peekPixels(&info, &row_bytes); | 288 const void* pixels = canvas->peekPixels(&info, &row_bytes); |
| 289 gfx::Size pixel_size(info.fWidth, info.fHeight); | 289 gfx::Size pixel_size(info.fWidth, info.fHeight); |
| 290 [software_layer_ setContentsToData:pixels | 290 [software_layer_ setContentsToData:pixels |
| 291 withRowBytes:row_bytes | 291 withRowBytes:row_bytes |
| 292 withPixelSize:pixel_size | 292 withPixelSize:pixel_size |
| 293 withScaleFactor:scale_factor]; | 293 withScaleFactor:scale_factor]; |
| 294 last_swap_size_dip_ = ConvertSizeToDIP(scale_factor, pixel_size); | 294 last_swap_size_dip_ = gfx::ConvertSizeToDIP(scale_factor, pixel_size); |
| 295 | 295 |
| 296 // Remove any different-type layers that this is replacing. | 296 // Remove any different-type layers that this is replacing. |
| 297 DestroyCAContextLayer(ca_context_layer_); | 297 DestroyCAContextLayer(ca_context_layer_); |
| 298 DestroyIOSurfaceLayer(io_surface_layer_); | 298 DestroyIOSurfaceLayer(io_surface_layer_); |
| 299 } | 299 } |
| 300 | 300 |
| 301 void AcceleratedWidgetMac::DestroyCAContextLayer( | 301 void AcceleratedWidgetMac::DestroyCAContextLayer( |
| 302 base::scoped_nsobject<CALayerHost> ca_context_layer) { | 302 base::scoped_nsobject<CALayerHost> ca_context_layer) { |
| 303 if (!ca_context_layer) | 303 if (!ca_context_layer) |
| 304 return; | 304 return; |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 void AcceleratedWidgetMacGotSoftwareFrame( | 381 void AcceleratedWidgetMacGotSoftwareFrame( |
| 382 gfx::AcceleratedWidget widget, | 382 gfx::AcceleratedWidget widget, |
| 383 cc::SoftwareFrameData* frame_data, float scale_factor, SkCanvas* canvas) { | 383 cc::SoftwareFrameData* frame_data, float scale_factor, SkCanvas* canvas) { |
| 384 AcceleratedWidgetMac* accelerated_widget_mac = | 384 AcceleratedWidgetMac* accelerated_widget_mac = |
| 385 GetHelperFromAcceleratedWidget(widget); | 385 GetHelperFromAcceleratedWidget(widget); |
| 386 if (accelerated_widget_mac) | 386 if (accelerated_widget_mac) |
| 387 accelerated_widget_mac->GotSoftwareFrame(frame_data, scale_factor, canvas); | 387 accelerated_widget_mac->GotSoftwareFrame(frame_data, scale_factor, canvas); |
| 388 } | 388 } |
| 389 | 389 |
| 390 } // namespace content | 390 } // namespace content |
| OLD | NEW |