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

Side by Side Diff: gpu/ipc/service/image_transport_surface_overlay_mac.mm

Issue 2365583004: Mac: Clean up plumbing of accelerated widgets (Closed)
Patch Set: make_scoped_refptr Created 4 years, 3 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
« no previous file with comments | « gpu/ipc/service/image_transport_surface_overlay_mac.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "gpu/ipc/service/image_transport_surface_overlay_mac.h" 5 #include "gpu/ipc/service/image_transport_surface_overlay_mac.h"
6 6
7 #include <CoreGraphics/CoreGraphics.h> 7 #include <CoreGraphics/CoreGraphics.h>
8 #include <IOSurface/IOSurface.h> 8 #include <IOSurface/IOSurface.h>
9 #include <OpenGL/CGLRenderers.h> 9 #include <OpenGL/CGLRenderers.h>
10 #include <OpenGL/CGLTypes.h> 10 #include <OpenGL/CGLTypes.h>
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 } 52 }
53 } 53 }
54 54
55 void IOSurfaceContextNoOp(scoped_refptr<ui::IOSurfaceContext>) { 55 void IOSurfaceContextNoOp(scoped_refptr<ui::IOSurfaceContext>) {
56 } 56 }
57 57
58 } // namespace 58 } // namespace
59 59
60 namespace gpu { 60 namespace gpu {
61 61
62 scoped_refptr<gl::GLSurface> ImageTransportSurfaceCreateNativeSurface(
63 GpuChannelManager* manager,
64 GpuCommandBufferStub* stub,
65 SurfaceHandle handle) {
66 return new ImageTransportSurfaceOverlayMac(stub, handle);
67 }
68
69 ImageTransportSurfaceOverlayMac::ImageTransportSurfaceOverlayMac( 62 ImageTransportSurfaceOverlayMac::ImageTransportSurfaceOverlayMac(
70 GpuCommandBufferStub* stub, 63 GpuCommandBufferStub* stub)
71 SurfaceHandle handle)
72 : stub_(stub->AsWeakPtr()), 64 : stub_(stub->AsWeakPtr()),
73 handle_(handle),
74 use_remote_layer_api_(ui::RemoteLayerAPISupported()), 65 use_remote_layer_api_(ui::RemoteLayerAPISupported()),
75 scale_factor_(1), 66 scale_factor_(1),
76 gl_renderer_id_(0) { 67 gl_renderer_id_(0) {
77 ui::GpuSwitchingManager::GetInstance()->AddObserver(this); 68 ui::GpuSwitchingManager::GetInstance()->AddObserver(this);
78 ca_layer_tree_coordinator_.reset( 69 ca_layer_tree_coordinator_.reset(
79 new ui::CALayerTreeCoordinator(use_remote_layer_api_)); 70 new ui::CALayerTreeCoordinator(use_remote_layer_api_));
80 } 71 }
81 72
82 ImageTransportSurfaceOverlayMac::~ImageTransportSurfaceOverlayMac() { 73 ImageTransportSurfaceOverlayMac::~ImageTransportSurfaceOverlayMac() {
83 ui::GpuSwitchingManager::GetInstance()->RemoveObserver(this); 74 ui::GpuSwitchingManager::GetInstance()->RemoveObserver(this);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 return false; 119 return false;
129 } 120 }
130 121
131 void ImageTransportSurfaceOverlayMac::SetLatencyInfo( 122 void ImageTransportSurfaceOverlayMac::SetLatencyInfo(
132 const std::vector<ui::LatencyInfo>& latency_info) { 123 const std::vector<ui::LatencyInfo>& latency_info) {
133 latency_info_.insert(latency_info_.end(), latency_info.begin(), 124 latency_info_.insert(latency_info_.end(), latency_info.begin(),
134 latency_info.end()); 125 latency_info.end());
135 } 126 }
136 127
137 void ImageTransportSurfaceOverlayMac::SendAcceleratedSurfaceBuffersSwapped( 128 void ImageTransportSurfaceOverlayMac::SendAcceleratedSurfaceBuffersSwapped(
138 gpu::SurfaceHandle surface_handle,
139 CAContextID ca_context_id, 129 CAContextID ca_context_id,
140 bool fullscreen_low_power_ca_context_valid, 130 bool fullscreen_low_power_ca_context_valid,
141 CAContextID fullscreen_low_power_ca_context_id, 131 CAContextID fullscreen_low_power_ca_context_id,
142 const gfx::ScopedRefCountedIOSurfaceMachPort& io_surface, 132 const gfx::ScopedRefCountedIOSurfaceMachPort& io_surface,
143 const gfx::Size& size, 133 const gfx::Size& size,
144 float scale_factor, 134 float scale_factor,
145 std::vector<ui::LatencyInfo> latency_info) { 135 std::vector<ui::LatencyInfo> latency_info) {
146 // TRACE_EVENT for gpu tests: 136 // TRACE_EVENT for gpu tests:
147 TRACE_EVENT_INSTANT2("test_gpu", "SwapBuffers", TRACE_EVENT_SCOPE_THREAD, 137 TRACE_EVENT_INSTANT2("test_gpu", "SwapBuffers", TRACE_EVENT_SCOPE_THREAD,
148 "GLImpl", static_cast<int>(gl::GetGLImplementation()), 138 "GLImpl", static_cast<int>(gl::GetGLImplementation()),
149 "width", size.width()); 139 "width", size.width());
150 140
151 GpuCommandBufferMsg_SwapBuffersCompleted_Params params; 141 GpuCommandBufferMsg_SwapBuffersCompleted_Params params;
152 params.surface_handle = surface_handle;
153 params.ca_context_id = ca_context_id; 142 params.ca_context_id = ca_context_id;
154 params.fullscreen_low_power_ca_context_valid = 143 params.fullscreen_low_power_ca_context_valid =
155 fullscreen_low_power_ca_context_valid; 144 fullscreen_low_power_ca_context_valid;
156 params.fullscreen_low_power_ca_context_id = 145 params.fullscreen_low_power_ca_context_id =
157 fullscreen_low_power_ca_context_id; 146 fullscreen_low_power_ca_context_id;
158 params.io_surface = io_surface; 147 params.io_surface = io_surface;
159 params.pixel_size = size; 148 params.pixel_size = size;
160 params.scale_factor = scale_factor; 149 params.scale_factor = scale_factor;
161 params.latency_info = std::move(latency_info); 150 params.latency_info = std::move(latency_info);
162 params.result = gfx::SwapResult::SWAP_ACK; 151 params.result = gfx::SwapResult::SWAP_ACK;
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 ca_context_id = [ca_context_ contextId]; 259 ca_context_id = [ca_context_ contextId];
271 fullscreen_low_power_ca_context_id = 260 fullscreen_low_power_ca_context_id =
272 [fullscreen_low_power_ca_context_ contextId]; 261 [fullscreen_low_power_ca_context_ contextId];
273 } else { 262 } else {
274 IOSurfaceRef io_surface = 263 IOSurfaceRef io_surface =
275 ca_layer_tree_coordinator_->GetIOSurfaceForDisplay(); 264 ca_layer_tree_coordinator_->GetIOSurfaceForDisplay();
276 if (io_surface) 265 if (io_surface)
277 io_surface_mach_port.reset(IOSurfaceCreateMachPort(io_surface)); 266 io_surface_mach_port.reset(IOSurfaceCreateMachPort(io_surface));
278 } 267 }
279 SendAcceleratedSurfaceBuffersSwapped( 268 SendAcceleratedSurfaceBuffersSwapped(
280 handle_, ca_context_id, fullscreen_low_power_layer_valid, 269 ca_context_id, fullscreen_low_power_layer_valid,
281 fullscreen_low_power_ca_context_id, io_surface_mach_port, pixel_size_, 270 fullscreen_low_power_ca_context_id, io_surface_mach_port, pixel_size_,
282 scale_factor_, std::move(latency_info_)); 271 scale_factor_, std::move(latency_info_));
283 272
284 // Reset all state for the next frame. 273 // Reset all state for the next frame.
285 latency_info_.clear(); 274 latency_info_.clear();
286 return gfx::SwapResult::SWAP_ACK; 275 return gfx::SwapResult::SWAP_ACK;
287 } 276 }
288 277
289 gfx::SwapResult ImageTransportSurfaceOverlayMac::SwapBuffers() { 278 gfx::SwapResult ImageTransportSurfaceOverlayMac::SwapBuffers() {
290 return SwapBuffersInternal( 279 return SwapBuffersInternal(
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 gl_renderer_id_ = context_renderer_id & kCGLRendererIDMatchingMask; 379 gl_renderer_id_ = context_renderer_id & kCGLRendererIDMatchingMask;
391 380
392 // Post a task holding a reference to the new GL context. The reason for 381 // Post a task holding a reference to the new GL context. The reason for
393 // this is to avoid creating-then-destroying the context for every image 382 // this is to avoid creating-then-destroying the context for every image
394 // transport surface that is observing the GPU switch. 383 // transport surface that is observing the GPU switch.
395 base::ThreadTaskRunnerHandle::Get()->PostTask( 384 base::ThreadTaskRunnerHandle::Get()->PostTask(
396 FROM_HERE, base::Bind(&IOSurfaceContextNoOp, context_on_new_gpu)); 385 FROM_HERE, base::Bind(&IOSurfaceContextNoOp, context_on_new_gpu));
397 } 386 }
398 387
399 } // namespace gpu 388 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/ipc/service/image_transport_surface_overlay_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698