| Index: content/renderer/gpu/compositor_software_output_device.cc
|
| diff --git a/content/renderer/gpu/compositor_software_output_device.cc b/content/renderer/gpu/compositor_software_output_device.cc
|
| deleted file mode 100644
|
| index 93155cc9ceeabfff34a1730f15c3e74c097b9c94..0000000000000000000000000000000000000000
|
| --- a/content/renderer/gpu/compositor_software_output_device.cc
|
| +++ /dev/null
|
| @@ -1,232 +0,0 @@
|
| -// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "content/renderer/gpu/compositor_software_output_device.h"
|
| -
|
| -#include "base/logging.h"
|
| -#include "cc/output/software_frame_data.h"
|
| -#include "content/child/child_shared_bitmap_manager.h"
|
| -#include "content/renderer/render_process.h"
|
| -#include "content/renderer/render_thread_impl.h"
|
| -#include "third_party/skia/include/core/SkCanvas.h"
|
| -#include "third_party/skia/include/core/SkPixelRef.h"
|
| -#include "third_party/skia/include/core/SkRegion.h"
|
| -#include "ui/gfx/skia_util.h"
|
| -
|
| -namespace {
|
| -
|
| -const size_t kInvalidIndex = static_cast<size_t>(-1);
|
| -
|
| -} // namespace
|
| -
|
| -namespace content {
|
| -
|
| -CompositorSoftwareOutputDevice::Buffer::Buffer(
|
| - unsigned id,
|
| - scoped_ptr<cc::SharedBitmap> bitmap)
|
| - : id_(id), shared_bitmap_(bitmap.Pass()), free_(true), parent_(NULL) {}
|
| -
|
| -CompositorSoftwareOutputDevice::Buffer::~Buffer() {
|
| -}
|
| -
|
| -void CompositorSoftwareOutputDevice::Buffer::SetParent(
|
| - Buffer* parent, const gfx::Rect& damage) {
|
| - parent_ = parent;
|
| - damage_ = damage;
|
| -}
|
| -
|
| -bool CompositorSoftwareOutputDevice::Buffer::FindDamageDifferenceFrom(
|
| - Buffer* buffer, SkRegion* result) const {
|
| - if (!buffer)
|
| - return false;
|
| -
|
| - if (buffer == this) {
|
| - *result = SkRegion();
|
| - return true;
|
| - }
|
| -
|
| - SkRegion damage;
|
| - const Buffer* current = this;
|
| - while (current->parent_) {
|
| - damage.op(RectToSkIRect(current->damage_), SkRegion::kUnion_Op);
|
| - if (current->parent_ == buffer) {
|
| - *result = damage;
|
| - return true;
|
| - }
|
| - current = current->parent_;
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| -CompositorSoftwareOutputDevice::CompositorSoftwareOutputDevice()
|
| - : current_index_(kInvalidIndex),
|
| - next_buffer_id_(1),
|
| - shared_bitmap_manager_(
|
| - RenderThreadImpl::current()->shared_bitmap_manager()) {
|
| - DetachFromThread();
|
| -}
|
| -
|
| -CompositorSoftwareOutputDevice::~CompositorSoftwareOutputDevice() {
|
| - DCHECK(CalledOnValidThread());
|
| -}
|
| -
|
| -unsigned CompositorSoftwareOutputDevice::GetNextId() {
|
| - unsigned id = next_buffer_id_++;
|
| - // Zero is reserved to label invalid frame id.
|
| - if (id == 0)
|
| - id = next_buffer_id_++;
|
| - return id;
|
| -}
|
| -
|
| -CompositorSoftwareOutputDevice::Buffer*
|
| -CompositorSoftwareOutputDevice::CreateBuffer() {
|
| - scoped_ptr<cc::SharedBitmap> shared_bitmap =
|
| - shared_bitmap_manager_->AllocateSharedBitmap(viewport_pixel_size_);
|
| - CHECK(shared_bitmap);
|
| - return new Buffer(GetNextId(), shared_bitmap.Pass());
|
| -}
|
| -
|
| -size_t CompositorSoftwareOutputDevice::FindFreeBuffer(size_t hint) {
|
| - for (size_t i = 0; i < buffers_.size(); ++i) {
|
| - size_t index = (hint + i) % buffers_.size();
|
| - if (buffers_[index]->free())
|
| - return index;
|
| - }
|
| -
|
| - buffers_.push_back(CreateBuffer());
|
| - return buffers_.size() - 1;
|
| -}
|
| -
|
| -void CompositorSoftwareOutputDevice::Resize(
|
| - const gfx::Size& viewport_pixel_size,
|
| - float scale_factor) {
|
| - DCHECK(CalledOnValidThread());
|
| -
|
| - scale_factor_ = scale_factor;
|
| -
|
| - if (viewport_pixel_size_ == viewport_pixel_size)
|
| - return;
|
| -
|
| - // Keep non-ACKed buffers in awaiting_ack_ until they get acknowledged.
|
| - for (size_t i = 0; i < buffers_.size(); ++i) {
|
| - if (!buffers_[i]->free()) {
|
| - awaiting_ack_.push_back(buffers_[i]);
|
| - buffers_[i] = NULL;
|
| - }
|
| - }
|
| -
|
| - buffers_.clear();
|
| - current_index_ = kInvalidIndex;
|
| - viewport_pixel_size_ = viewport_pixel_size;
|
| -}
|
| -
|
| -void CompositorSoftwareOutputDevice::DiscardBackbuffer() {
|
| - // Keep non-ACKed buffers in awaiting_ack_ until they get acknowledged.
|
| - for (size_t i = 0; i < buffers_.size(); ++i) {
|
| - if (!buffers_[i]->free()) {
|
| - awaiting_ack_.push_back(buffers_[i]);
|
| - buffers_[i] = NULL;
|
| - }
|
| - }
|
| - buffers_.clear();
|
| - current_index_ = kInvalidIndex;
|
| -}
|
| -
|
| -void CompositorSoftwareOutputDevice::EnsureBackbuffer() {
|
| -}
|
| -
|
| -SkCanvas* CompositorSoftwareOutputDevice::BeginPaint(
|
| - const gfx::Rect& damage_rect) {
|
| - DCHECK(CalledOnValidThread());
|
| -
|
| - Buffer* previous = NULL;
|
| - if (current_index_ != kInvalidIndex)
|
| - previous = buffers_[current_index_];
|
| - current_index_ = FindFreeBuffer(current_index_ + 1);
|
| - Buffer* current = buffers_[current_index_];
|
| - DCHECK(current->free());
|
| - current->SetFree(false);
|
| -
|
| - // Set up a canvas for the current front buffer.
|
| - SkImageInfo info = SkImageInfo::MakeN32Premul(viewport_pixel_size_.width(),
|
| - viewport_pixel_size_.height());
|
| - surface_ = skia::AdoptRef(SkSurface::NewRasterDirect(info, current->memory(),
|
| - info.minRowBytes()));
|
| -
|
| - if (!previous) {
|
| - DCHECK(damage_rect == gfx::Rect(viewport_pixel_size_));
|
| - } else {
|
| - // Find the smallest damage region that needs
|
| - // to be copied from the |previous| buffer.
|
| - SkRegion region;
|
| - bool found =
|
| - current->FindDamageDifferenceFrom(previous, ®ion) ||
|
| - previous->FindDamageDifferenceFrom(current, ®ion);
|
| - if (!found)
|
| - region = SkRegion(RectToSkIRect(gfx::Rect(viewport_pixel_size_)));
|
| - region.op(RectToSkIRect(damage_rect), SkRegion::kDifference_Op);
|
| -
|
| - // Copy over the damage region.
|
| - if (!region.isEmpty()) {
|
| - SkImageInfo info = SkImageInfo::MakeN32Premul(
|
| - viewport_pixel_size_.width(), viewport_pixel_size_.height());
|
| - SkBitmap back_bitmap;
|
| - back_bitmap.installPixels(info, previous->memory(), info.minRowBytes());
|
| -
|
| - for (SkRegion::Iterator it(region); !it.done(); it.next()) {
|
| - const SkIRect& src_rect = it.rect();
|
| - SkRect dst_rect = SkRect::Make(src_rect);
|
| - surface_->getCanvas()->drawBitmapRect(back_bitmap, &src_rect, dst_rect);
|
| - }
|
| - }
|
| - }
|
| -
|
| - // Make |current| child of |previous| and orphan all of |current|'s children.
|
| - current->SetParent(previous, damage_rect);
|
| - for (size_t i = 0; i < buffers_.size(); ++i) {
|
| - Buffer* buffer = buffers_[i];
|
| - if (buffer->parent() == current)
|
| - buffer->SetParent(NULL, gfx::Rect(viewport_pixel_size_));
|
| - }
|
| - damage_rect_ = damage_rect;
|
| -
|
| - return surface_->getCanvas();
|
| -}
|
| -
|
| -void CompositorSoftwareOutputDevice::EndPaint(
|
| - cc::SoftwareFrameData* frame_data) {
|
| - DCHECK(CalledOnValidThread());
|
| - DCHECK(frame_data);
|
| -
|
| - Buffer* buffer = buffers_[current_index_];
|
| - frame_data->id = buffer->id();
|
| - frame_data->size = viewport_pixel_size_;
|
| - frame_data->damage_rect = damage_rect_;
|
| - frame_data->bitmap_id = buffer->shared_bitmap_id();
|
| -}
|
| -
|
| -void CompositorSoftwareOutputDevice::ReclaimSoftwareFrame(unsigned id) {
|
| - DCHECK(CalledOnValidThread());
|
| -
|
| - if (!id)
|
| - return;
|
| -
|
| - // The reclaimed buffer id might not be among the currently
|
| - // active buffers if we got a resize event in the mean time.
|
| - ScopedVector<Buffer>::iterator it =
|
| - std::find_if(buffers_.begin(), buffers_.end(), CompareById(id));
|
| - if (it != buffers_.end()) {
|
| - DCHECK(!(*it)->free());
|
| - (*it)->SetFree(true);
|
| - return;
|
| - } else {
|
| - it = std::find_if(awaiting_ack_.begin(), awaiting_ack_.end(),
|
| - CompareById(id));
|
| - DCHECK(it != awaiting_ack_.end());
|
| - awaiting_ack_.erase(it);
|
| - }
|
| -}
|
| -
|
| -} // namespace content
|
|
|