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

Side by Side Diff: content/browser/compositor/gpu_browser_compositor_output_surface.cc

Issue 2646243002: Use IDCompositionSurface to implement DirectCompositionSurfaceWin. (Closed)
Patch Set: more changes Created 3 years, 11 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
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/gpu_browser_compositor_output_surface.h" 5 #include "content/browser/compositor/gpu_browser_compositor_output_surface.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "build/build_config.h" 9 #include "build/build_config.h"
10 #include "cc/output/output_surface_client.h" 10 #include "cc/output/output_surface_client.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 } 77 }
78 78
79 void GpuBrowserCompositorOutputSurface::BindFramebuffer() { 79 void GpuBrowserCompositorOutputSurface::BindFramebuffer() {
80 context_provider()->ContextGL()->BindFramebuffer(GL_FRAMEBUFFER, 0); 80 context_provider()->ContextGL()->BindFramebuffer(GL_FRAMEBUFFER, 0);
81 } 81 }
82 82
83 void GpuBrowserCompositorOutputSurface::Reshape( 83 void GpuBrowserCompositorOutputSurface::Reshape(
84 const gfx::Size& size, 84 const gfx::Size& size,
85 float device_scale_factor, 85 float device_scale_factor,
86 const gfx::ColorSpace& color_space, 86 const gfx::ColorSpace& color_space,
87 bool has_alpha) { 87 bool has_alpha) {
sunnyps 2017/01/28 01:33:58 can we add a flag to check if set draw rect after
88 context_provider()->ContextGL()->ResizeCHROMIUM( 88 context_provider()->ContextGL()->ResizeCHROMIUM(
89 size.width(), size.height(), device_scale_factor, has_alpha); 89 size.width(), size.height(), device_scale_factor, has_alpha);
90 } 90 }
91 91
92 void GpuBrowserCompositorOutputSurface::SwapBuffers( 92 void GpuBrowserCompositorOutputSurface::SwapBuffers(
93 cc::OutputSurfaceFrame frame) { 93 cc::OutputSurfaceFrame frame) {
94 GetCommandBufferProxy()->SetLatencyInfo(frame.latency_info); 94 GetCommandBufferProxy()->SetLatencyInfo(frame.latency_info);
95 95
96 gfx::Rect swap_rect = frame.sub_buffer_rect; 96 gfx::Rect swap_rect = frame.sub_buffer_rect;
97 gfx::Size surface_size = frame.size; 97 gfx::Size surface_size = frame.size;
98 if (reflector_) { 98 if (reflector_) {
99 if (swap_rect == gfx::Rect(surface_size)) { 99 if (swap_rect == gfx::Rect(surface_size)) {
100 reflector_texture_->CopyTextureFullImage(surface_size); 100 reflector_texture_->CopyTextureFullImage(surface_size);
101 reflector_->OnSourceSwapBuffers(surface_size); 101 reflector_->OnSourceSwapBuffers(surface_size);
102 } else { 102 } else {
103 reflector_texture_->CopyTextureSubImage(swap_rect); 103 reflector_texture_->CopyTextureSubImage(swap_rect);
104 reflector_->OnSourcePostSubBuffer(swap_rect, surface_size); 104 reflector_->OnSourcePostSubBuffer(swap_rect, surface_size);
105 } 105 }
106 } 106 }
107 107
108 set_draw_rectangle_for_frame_ = false;
109
108 if (swap_rect == gfx::Rect(frame.size)) 110 if (swap_rect == gfx::Rect(frame.size))
109 context_provider_->ContextSupport()->Swap(); 111 context_provider_->ContextSupport()->Swap();
110 else 112 else
111 context_provider_->ContextSupport()->PartialSwapBuffers(swap_rect); 113 context_provider_->ContextSupport()->PartialSwapBuffers(swap_rect);
112 } 114 }
113 115
114 uint32_t GpuBrowserCompositorOutputSurface::GetFramebufferCopyTextureFormat() { 116 uint32_t GpuBrowserCompositorOutputSurface::GetFramebufferCopyTextureFormat() {
115 auto* gl = static_cast<ui::ContextProviderCommandBuffer*>(context_provider()); 117 auto* gl = static_cast<ui::ContextProviderCommandBuffer*>(context_provider());
116 return gl->GetCopyTextureInternalFormat(); 118 return gl->GetCopyTextureInternalFormat();
117 } 119 }
118 120
119 bool GpuBrowserCompositorOutputSurface::IsDisplayedAsOverlayPlane() const { 121 bool GpuBrowserCompositorOutputSurface::IsDisplayedAsOverlayPlane() const {
120 return false; 122 return false;
121 } 123 }
122 124
123 unsigned GpuBrowserCompositorOutputSurface::GetOverlayTextureId() const { 125 unsigned GpuBrowserCompositorOutputSurface::GetOverlayTextureId() const {
124 return 0; 126 return 0;
125 } 127 }
126 128
127 bool GpuBrowserCompositorOutputSurface::SurfaceIsSuspendForRecycle() const { 129 bool GpuBrowserCompositorOutputSurface::SurfaceIsSuspendForRecycle() const {
128 return false; 130 return false;
129 } 131 }
130 132
131 #if defined(OS_MACOSX) 133 #if defined(OS_MACOSX)
132 void GpuBrowserCompositorOutputSurface::SetSurfaceSuspendedForRecycle( 134 void GpuBrowserCompositorOutputSurface::SetSurfaceSuspendedForRecycle(
133 bool suspended) {} 135 bool suspended) {}
134 #endif 136 #endif
135 137
138 void GpuBrowserCompositorOutputSurface::SetDrawRectangle(
139 const gfx::Rect& rect) {
140 if (set_draw_rectangle_for_frame_)
sunnyps 2017/01/28 01:33:58 should we dcheck/check(!set_draw_rectangle_for_fra
sunnyps 2017/01/28 01:33:58 can we dcheck/check that rect is a subrect of surf
141 return;
142 set_draw_rectangle_for_frame_ = true;
143 context_provider()->ContextGL()->SetDrawRectangleCHROMIUM(
144 rect.x(), rect.y(), rect.width(), rect.height());
145 }
146
136 gpu::CommandBufferProxyImpl* 147 gpu::CommandBufferProxyImpl*
137 GpuBrowserCompositorOutputSurface::GetCommandBufferProxy() { 148 GpuBrowserCompositorOutputSurface::GetCommandBufferProxy() {
138 ui::ContextProviderCommandBuffer* provider_command_buffer = 149 ui::ContextProviderCommandBuffer* provider_command_buffer =
139 static_cast<ui::ContextProviderCommandBuffer*>(context_provider_.get()); 150 static_cast<ui::ContextProviderCommandBuffer*>(context_provider_.get());
140 gpu::CommandBufferProxyImpl* command_buffer_proxy = 151 gpu::CommandBufferProxyImpl* command_buffer_proxy =
141 provider_command_buffer->GetCommandBufferProxy(); 152 provider_command_buffer->GetCommandBufferProxy();
142 DCHECK(command_buffer_proxy); 153 DCHECK(command_buffer_proxy);
143 return command_buffer_proxy; 154 return command_buffer_proxy;
144 } 155 }
145 156
146 } // namespace content 157 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698