Chromium Code Reviews| 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 "components/display_compositor/buffer_queue.h" | 5 #include "components/display_compositor/buffer_queue.h" |
| 6 | 6 |
| 7 #include "base/containers/adapters.h" | 7 #include "base/containers/adapters.h" |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "build/build_config.h" | 9 #include "build/build_config.h" |
| 10 #include "components/display_compositor/gl_helper.h" | 10 #include "components/display_compositor/gl_helper.h" |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 100 } | 100 } |
| 101 current_surface_->damage = gfx::Rect(); | 101 current_surface_->damage = gfx::Rect(); |
| 102 } | 102 } |
| 103 UpdateBufferDamage(damage); | 103 UpdateBufferDamage(damage); |
| 104 in_flight_surfaces_.push_back(std::move(current_surface_)); | 104 in_flight_surfaces_.push_back(std::move(current_surface_)); |
| 105 // Some things reset the framebuffer (CopySubBufferDamage, some GLRenderer | 105 // Some things reset the framebuffer (CopySubBufferDamage, some GLRenderer |
| 106 // paths), so ensure we restore it here. | 106 // paths), so ensure we restore it here. |
| 107 gl_->BindFramebuffer(GL_FRAMEBUFFER, fbo_); | 107 gl_->BindFramebuffer(GL_FRAMEBUFFER, fbo_); |
| 108 } | 108 } |
| 109 | 109 |
| 110 void BufferQueue::Reshape(const gfx::Size& size, float scale_factor) { | 110 void BufferQueue::Reshape(const gfx::Size& size, |
| 111 if (size == size_) | 111 float scale_factor, |
| 112 const gfx::ColorSpace& color_space) { | |
| 113 if (size == size_ && color_space == color_space_) | |
|
hubbe
2016/07/06 21:30:53
Isn't this the kind of comparison you were worried
| |
| 112 return; | 114 return; |
| 113 #if !defined(OS_MACOSX) | 115 #if !defined(OS_MACOSX) |
| 114 // TODO(ccameron): This assert is being hit on Mac try jobs. Determine if that | 116 // TODO(ccameron): This assert is being hit on Mac try jobs. Determine if that |
| 115 // is cause for concern or if it is benign. | 117 // is cause for concern or if it is benign. |
| 116 // http://crbug.com/524624 | 118 // http://crbug.com/524624 |
| 117 DCHECK(!current_surface_); | 119 DCHECK(!current_surface_); |
| 118 #endif | 120 #endif |
| 119 size_ = size; | 121 size_ = size; |
| 122 color_space_ = color_space; | |
| 120 | 123 |
| 121 // TODO: add stencil buffer when needed. | 124 // TODO: add stencil buffer when needed. |
| 122 gl_->BindFramebuffer(GL_FRAMEBUFFER, fbo_); | 125 gl_->BindFramebuffer(GL_FRAMEBUFFER, fbo_); |
| 123 gl_->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, | 126 gl_->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, |
| 124 texture_target_, 0, 0); | 127 texture_target_, 0, 0); |
| 125 | 128 |
| 126 FreeAllSurfaces(); | 129 FreeAllSurfaces(); |
| 127 } | 130 } |
| 128 | 131 |
| 129 void BufferQueue::RecreateBuffers() { | 132 void BufferQueue::RecreateBuffers() { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 211 | 214 |
| 212 std::unique_ptr<gfx::GpuMemoryBuffer> buffer( | 215 std::unique_ptr<gfx::GpuMemoryBuffer> buffer( |
| 213 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( | 216 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( |
| 214 size_, gpu::DefaultBufferFormatForImageFormat(internal_format_), | 217 size_, gpu::DefaultBufferFormatForImageFormat(internal_format_), |
| 215 gfx::BufferUsage::SCANOUT, surface_handle_)); | 218 gfx::BufferUsage::SCANOUT, surface_handle_)); |
| 216 if (!buffer.get()) { | 219 if (!buffer.get()) { |
| 217 gl_->DeleteTextures(1, &texture); | 220 gl_->DeleteTextures(1, &texture); |
| 218 DLOG(ERROR) << "Failed to allocate GPU memory buffer"; | 221 DLOG(ERROR) << "Failed to allocate GPU memory buffer"; |
| 219 return nullptr; | 222 return nullptr; |
| 220 } | 223 } |
| 224 buffer->SetColorSpaceForScanout(color_space_); | |
| 221 | 225 |
| 222 uint32_t id = | 226 uint32_t id = |
| 223 gl_->CreateImageCHROMIUM(buffer->AsClientBuffer(), size_.width(), | 227 gl_->CreateImageCHROMIUM(buffer->AsClientBuffer(), size_.width(), |
| 224 size_.height(), internal_format_); | 228 size_.height(), internal_format_); |
| 225 if (!id) { | 229 if (!id) { |
| 226 LOG(ERROR) << "Failed to allocate backing image surface"; | 230 LOG(ERROR) << "Failed to allocate backing image surface"; |
| 227 gl_->DeleteTextures(1, &texture); | 231 gl_->DeleteTextures(1, &texture); |
| 228 return nullptr; | 232 return nullptr; |
| 229 } | 233 } |
| 230 | 234 |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 245 buffer(buffer.release()), | 249 buffer(buffer.release()), |
| 246 texture(texture), | 250 texture(texture), |
| 247 image(image), | 251 image(image), |
| 248 damage(rect) {} | 252 damage(rect) {} |
| 249 | 253 |
| 250 BufferQueue::AllocatedSurface::~AllocatedSurface() { | 254 BufferQueue::AllocatedSurface::~AllocatedSurface() { |
| 251 buffer_queue->FreeSurfaceResources(this); | 255 buffer_queue->FreeSurfaceResources(this); |
| 252 } | 256 } |
| 253 | 257 |
| 254 } // namespace display_compositor | 258 } // namespace display_compositor |
| OLD | NEW |