Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/renderer/gpu/compositor_software_output_device.h" | 5 #include "content/renderer/gpu/compositor_software_output_device.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "cc/output/software_frame_data.h" | 8 #include "cc/output/software_frame_data.h" |
| 9 #include "content/child/child_shared_bitmap_manager.h" | 9 #include "content/child/child_shared_bitmap_manager.h" |
| 10 #include "content/renderer/render_process.h" | 10 #include "content/renderer/render_process.h" |
| 11 #include "content/renderer/render_thread_impl.h" | 11 #include "content/renderer/render_thread_impl.h" |
| 12 #include "third_party/skia/include/core/SkBitmapDevice.h" | 12 #include "third_party/skia/include/core/SkBitmapDevice.h" |
| 13 #include "third_party/skia/include/core/SkCanvas.h" | 13 #include "third_party/skia/include/core/SkCanvas.h" |
| 14 #include "third_party/skia/include/core/SkPixelRef.h" | 14 #include "third_party/skia/include/core/SkPixelRef.h" |
| 15 #include "third_party/skia/include/core/SkRegion.h" | 15 #include "third_party/skia/include/core/SkRegion.h" |
| 16 #include "ui/gfx/skia_util.h" | 16 #include "ui/gfx/skia_util.h" |
| 17 | 17 |
| 18 namespace { | |
| 19 | |
| 20 static const size_t kInvalidIndex = static_cast<size_t>(-1); | |
|
jamesr
2014/07/07 22:48:07
the anonymous namespace and the 'static' are redun
Peter Kasting
2014/07/07 22:52:18
Yes. Sorry. Dropping the "static".
| |
| 21 | |
| 22 } // namespace | |
| 23 | |
| 18 namespace content { | 24 namespace content { |
| 19 | 25 |
| 20 CompositorSoftwareOutputDevice::Buffer::Buffer( | 26 CompositorSoftwareOutputDevice::Buffer::Buffer( |
| 21 unsigned id, | 27 unsigned id, |
| 22 scoped_ptr<cc::SharedBitmap> bitmap) | 28 scoped_ptr<cc::SharedBitmap> bitmap) |
| 23 : id_(id), shared_bitmap_(bitmap.Pass()), free_(true), parent_(NULL) {} | 29 : id_(id), shared_bitmap_(bitmap.Pass()), free_(true), parent_(NULL) {} |
| 24 | 30 |
| 25 CompositorSoftwareOutputDevice::Buffer::~Buffer() { | 31 CompositorSoftwareOutputDevice::Buffer::~Buffer() { |
| 26 } | 32 } |
| 27 | 33 |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 49 *result = damage; | 55 *result = damage; |
| 50 return true; | 56 return true; |
| 51 } | 57 } |
| 52 current = current->parent_; | 58 current = current->parent_; |
| 53 } | 59 } |
| 54 | 60 |
| 55 return false; | 61 return false; |
| 56 } | 62 } |
| 57 | 63 |
| 58 CompositorSoftwareOutputDevice::CompositorSoftwareOutputDevice() | 64 CompositorSoftwareOutputDevice::CompositorSoftwareOutputDevice() |
| 59 : current_index_(-1), | 65 : current_index_(kInvalidIndex), |
| 60 next_buffer_id_(1), | 66 next_buffer_id_(1), |
| 61 shared_bitmap_manager_( | 67 shared_bitmap_manager_( |
| 62 RenderThreadImpl::current()->shared_bitmap_manager()) { | 68 RenderThreadImpl::current()->shared_bitmap_manager()) { |
| 63 DetachFromThread(); | 69 DetachFromThread(); |
| 64 } | 70 } |
| 65 | 71 |
| 66 CompositorSoftwareOutputDevice::~CompositorSoftwareOutputDevice() { | 72 CompositorSoftwareOutputDevice::~CompositorSoftwareOutputDevice() { |
| 67 DCHECK(CalledOnValidThread()); | 73 DCHECK(CalledOnValidThread()); |
| 68 } | 74 } |
| 69 | 75 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 106 | 112 |
| 107 // Keep non-ACKed buffers in awaiting_ack_ until they get acknowledged. | 113 // Keep non-ACKed buffers in awaiting_ack_ until they get acknowledged. |
| 108 for (size_t i = 0; i < buffers_.size(); ++i) { | 114 for (size_t i = 0; i < buffers_.size(); ++i) { |
| 109 if (!buffers_[i]->free()) { | 115 if (!buffers_[i]->free()) { |
| 110 awaiting_ack_.push_back(buffers_[i]); | 116 awaiting_ack_.push_back(buffers_[i]); |
| 111 buffers_[i] = NULL; | 117 buffers_[i] = NULL; |
| 112 } | 118 } |
| 113 } | 119 } |
| 114 | 120 |
| 115 buffers_.clear(); | 121 buffers_.clear(); |
| 116 current_index_ = -1; | 122 current_index_ = kInvalidIndex; |
| 117 viewport_pixel_size_ = viewport_pixel_size; | 123 viewport_pixel_size_ = viewport_pixel_size; |
| 118 } | 124 } |
| 119 | 125 |
| 120 void CompositorSoftwareOutputDevice::DiscardBackbuffer() { | 126 void CompositorSoftwareOutputDevice::DiscardBackbuffer() { |
| 121 // Keep non-ACKed buffers in awaiting_ack_ until they get acknowledged. | 127 // Keep non-ACKed buffers in awaiting_ack_ until they get acknowledged. |
| 122 for (size_t i = 0; i < buffers_.size(); ++i) { | 128 for (size_t i = 0; i < buffers_.size(); ++i) { |
| 123 if (!buffers_[i]->free()) { | 129 if (!buffers_[i]->free()) { |
| 124 awaiting_ack_.push_back(buffers_[i]); | 130 awaiting_ack_.push_back(buffers_[i]); |
| 125 buffers_[i] = NULL; | 131 buffers_[i] = NULL; |
| 126 } | 132 } |
| 127 } | 133 } |
| 128 buffers_.clear(); | 134 buffers_.clear(); |
| 129 current_index_ = -1; | 135 current_index_ = kInvalidIndex; |
| 130 } | 136 } |
| 131 | 137 |
| 132 void CompositorSoftwareOutputDevice::EnsureBackbuffer() { | 138 void CompositorSoftwareOutputDevice::EnsureBackbuffer() { |
| 133 } | 139 } |
| 134 | 140 |
| 135 SkCanvas* CompositorSoftwareOutputDevice::BeginPaint( | 141 SkCanvas* CompositorSoftwareOutputDevice::BeginPaint( |
| 136 const gfx::Rect& damage_rect) { | 142 const gfx::Rect& damage_rect) { |
| 137 DCHECK(CalledOnValidThread()); | 143 DCHECK(CalledOnValidThread()); |
| 138 | 144 |
| 139 Buffer* previous = NULL; | 145 Buffer* previous = NULL; |
| 140 if (current_index_ != size_t(-1)) | 146 if (current_index_ != kInvalidIndex) |
| 141 previous = buffers_[current_index_]; | 147 previous = buffers_[current_index_]; |
| 142 current_index_ = FindFreeBuffer(current_index_ + 1); | 148 current_index_ = FindFreeBuffer(current_index_ + 1); |
| 143 Buffer* current = buffers_[current_index_]; | 149 Buffer* current = buffers_[current_index_]; |
| 144 DCHECK(current->free()); | 150 DCHECK(current->free()); |
| 145 current->SetFree(false); | 151 current->SetFree(false); |
| 146 | 152 |
| 147 // Set up a canvas for the current front buffer. | 153 // Set up a canvas for the current front buffer. |
| 148 SkImageInfo info = SkImageInfo::MakeN32Premul(viewport_pixel_size_.width(), | 154 SkImageInfo info = SkImageInfo::MakeN32Premul(viewport_pixel_size_.width(), |
| 149 viewport_pixel_size_.height()); | 155 viewport_pixel_size_.height()); |
| 150 SkBitmap bitmap; | 156 SkBitmap bitmap; |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 219 return; | 225 return; |
| 220 } else { | 226 } else { |
| 221 it = std::find_if(awaiting_ack_.begin(), awaiting_ack_.end(), | 227 it = std::find_if(awaiting_ack_.begin(), awaiting_ack_.end(), |
| 222 CompareById(id)); | 228 CompareById(id)); |
| 223 DCHECK(it != awaiting_ack_.end()); | 229 DCHECK(it != awaiting_ack_.end()); |
| 224 awaiting_ack_.erase(it); | 230 awaiting_ack_.erase(it); |
| 225 } | 231 } |
| 226 } | 232 } |
| 227 | 233 |
| 228 } // namespace content | 234 } // namespace content |
| OLD | NEW |