Index: services/ui/demo/bitmap_uploader.cc |
diff --git a/services/ui/demo/bitmap_uploader.cc b/services/ui/demo/bitmap_uploader.cc |
deleted file mode 100644 |
index b208ed8627a08f613b72d061dee16a71ae1c1589..0000000000000000000000000000000000000000 |
--- a/services/ui/demo/bitmap_uploader.cc |
+++ /dev/null |
@@ -1,243 +0,0 @@ |
-// Copyright 2015 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 "services/ui/demo/bitmap_uploader.h" |
- |
-#include <stddef.h> |
-#include <utility> |
- |
-#include "base/bind.h" |
-#include "base/callback.h" |
-#include "base/threading/thread_task_runner_handle.h" |
-#include "cc/ipc/compositor_frame.mojom.h" |
-#include "cc/quads/render_pass.h" |
-#include "cc/quads/solid_color_draw_quad.h" |
-#include "cc/quads/texture_draw_quad.h" |
-#include "services/ui/public/cpp/context_provider.h" |
-#include "services/ui/public/cpp/gles2_context.h" |
-#include "services/ui/public/cpp/gpu/gpu_service.h" |
-#include "services/ui/public/cpp/window.h" |
- |
-namespace ui { |
-namespace { |
- |
-const uint32_t g_transparent_color = 0x00000000; |
- |
-} // namespace |
- |
-const char kBitmapUploaderForAcceleratedWidget[] = |
- "__BITMAP_UPLOADER_ACCELERATED_WIDGET__"; |
- |
-BitmapUploader::BitmapUploader(Window* window) |
- : window_(window), |
- color_(g_transparent_color), |
- width_(0), |
- height_(0), |
- format_(BGRA), |
- next_resource_id_(1u), |
- weak_factory_(this) {} |
- |
-void BitmapUploader::Init(ui::GpuService* gpu_service) { |
- gpu_service->EstablishGpuChannel(base::Bind( |
- &BitmapUploader::OnGpuChannelEstablished, weak_factory_.GetWeakPtr(), |
- gpu_service->gpu_memory_buffer_manager())); |
-} |
- |
-BitmapUploader::~BitmapUploader() { |
- compositor_frame_sink_->DetachFromClient(); |
-} |
- |
-// Sets the color which is RGBA. |
-void BitmapUploader::SetColor(uint32_t color) { |
- if (color_ == color) |
- return; |
- color_ = color; |
- if (compositor_frame_sink_) |
- Upload(); |
-} |
- |
-// Sets a bitmap. |
-void BitmapUploader::SetBitmap(int width, |
- int height, |
- std::unique_ptr<std::vector<unsigned char>> data, |
- Format format) { |
- width_ = width; |
- height_ = height; |
- bitmap_ = std::move(data); |
- format_ = format; |
- if (compositor_frame_sink_) |
- Upload(); |
-} |
- |
-void BitmapUploader::Upload() { |
- if (!compositor_frame_sink_ || !compositor_frame_sink_->context_provider()) |
- return; |
- |
- const gfx::Rect bounds(window_->bounds().size()); |
- |
- cc::CompositorFrame frame; |
- // TODO(rjkroege): Support device scale factors other than 1. |
- frame.metadata.device_scale_factor = 1.0f; |
- frame.resource_list.resize(0u); |
- |
- const cc::RenderPassId render_pass_id(1, 1); |
- std::unique_ptr<cc::RenderPass> pass = cc::RenderPass::Create(); |
- pass->SetAll(render_pass_id, bounds, bounds, gfx::Transform(), |
- true /* has_transparent_background */); |
- |
- // The SharedQuadState is owned by the SharedQuadStateList |
- // shared_quad_state_list. |
- cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
- sqs->SetAll(gfx::Transform(), bounds.size(), bounds, bounds, |
- false /* is_clipped */, 1.f /* opacity */, SkBlendMode::kSrc, |
- 0 /* sorting_context_id */); |
- |
- if (bitmap_.get()) { |
- gpu::gles2::GLES2Interface* gl = |
- compositor_frame_sink_->context_provider()->ContextGL(); |
- gfx::Size bitmap_size(width_, height_); |
- GLuint texture_id = BindTextureForSize(bitmap_size); |
- gl->TexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, bitmap_size.width(), |
- bitmap_size.height(), TextureFormat(), GL_UNSIGNED_BYTE, |
- &((*bitmap_)[0])); |
- |
- gpu::Mailbox mailbox; |
- gl->GenMailboxCHROMIUM(mailbox.name); |
- gl->ProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
- |
- const GLuint64 fence_sync = gl->InsertFenceSyncCHROMIUM(); |
- gl->ShallowFlushCHROMIUM(); |
- |
- gpu::SyncToken sync_token; |
- gl->GenSyncTokenCHROMIUM(fence_sync, sync_token.GetData()); |
- |
- cc::TransferableResource resource; |
- resource.id = next_resource_id_++; |
- resource_to_texture_id_map_[resource.id] = texture_id; |
- resource.format = cc::ResourceFormat::RGBA_8888; |
- resource.filter = GL_LINEAR; |
- resource.size = bitmap_size; |
- resource.mailbox_holder = |
- gpu::MailboxHolder(mailbox, sync_token, GL_TEXTURE_2D); |
- resource.read_lock_fences_enabled = false; |
- resource.is_software = false; |
- resource.is_overlay_candidate = false; |
- frame.resource_list.push_back(std::move(resource)); |
- |
- cc::TextureDrawQuad* quad = |
- pass->CreateAndAppendDrawQuad<cc::TextureDrawQuad>(); |
- |
- gfx::Size rect_size; |
- if (width_ <= bounds.width() && height_ <= bounds.height()) { |
- rect_size.SetSize(width_, height_); |
- } else { |
- // The source bitmap is larger than the viewport. Resize it while |
- // maintaining the aspect ratio. |
- float width_ratio = static_cast<float>(width_) / bounds.width(); |
- float height_ratio = static_cast<float>(height_) / bounds.height(); |
- if (width_ratio > height_ratio) { |
- rect_size.SetSize(bounds.width(), height_ / width_ratio); |
- } else { |
- rect_size.SetSize(width_ / height_ratio, bounds.height()); |
- } |
- } |
- gfx::Rect rect(rect_size); |
- const bool needs_blending = true; |
- const bool premultiplied_alpha = true; |
- const gfx::PointF uv_top_left(0.f, 0.f); |
- const gfx::PointF uv_bottom_right(1.f, 1.f); |
- float vertex_opacity[4] = {1.f, 1.f, 1.f, 1.f}; |
- const bool y_flipped = false; |
- const bool nearest_neighbor = false; |
- quad->SetAll(sqs, rect, rect, rect, needs_blending, resource.id, |
- gfx::Size(), premultiplied_alpha, uv_top_left, uv_bottom_right, |
- g_transparent_color, vertex_opacity, y_flipped, |
- nearest_neighbor, false); |
- } |
- |
- if (color_ != g_transparent_color) { |
- cc::SolidColorDrawQuad* quad = |
- pass->CreateAndAppendDrawQuad<cc::SolidColorDrawQuad>(); |
- const bool force_antialiasing_off = false; |
- const gfx::Rect opaque_rect(0, 0, 0, 0); |
- const bool needs_blending = true; |
- quad->SetAll(sqs, bounds, opaque_rect, bounds, needs_blending, color_, |
- force_antialiasing_off); |
- } |
- |
- frame.render_pass_list.push_back(std::move(pass)); |
- |
- // TODO(rjkroege, fsamuel): We should throttle frames. |
- compositor_frame_sink_->SubmitCompositorFrame(std::move(frame)); |
-} |
- |
-void BitmapUploader::OnGpuChannelEstablished( |
- gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
- scoped_refptr<gpu::GpuChannelHost> gpu_channel) { |
- compositor_frame_sink_ = window_->RequestCompositorFrameSink( |
- mojom::CompositorFrameSinkType::DEFAULT, |
- new ContextProvider(std::move(gpu_channel)), gpu_memory_buffer_manager); |
- compositor_frame_sink_->BindToClient(this); |
-} |
- |
-uint32_t BitmapUploader::BindTextureForSize(const gfx::Size& size) { |
- gpu::gles2::GLES2Interface* gl = |
- compositor_frame_sink_->context_provider()->ContextGL(); |
- // TODO(jamesr): Recycle textures. |
- GLuint texture = 0u; |
- gl->GenTextures(1, &texture); |
- gl->BindTexture(GL_TEXTURE_2D, texture); |
- gl->TexImage2D(GL_TEXTURE_2D, 0, TextureFormat(), size.width(), size.height(), |
- 0, TextureFormat(), GL_UNSIGNED_BYTE, 0); |
- gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
- return texture; |
-} |
- |
-void BitmapUploader::SetBeginFrameSource(cc::BeginFrameSource* source) {} |
- |
-void BitmapUploader::ReclaimResources( |
- const cc::ReturnedResourceArray& resources) { |
- gpu::gles2::GLES2Interface* gl = |
- compositor_frame_sink_->context_provider()->ContextGL(); |
- // TODO(jamesr): Recycle. |
- for (size_t i = 0; i < resources.size(); ++i) { |
- cc::ReturnedResource resource = std::move(resources[i]); |
- DCHECK_EQ(1, resource.count); |
- gl->WaitSyncTokenCHROMIUM(resource.sync_token.GetConstData()); |
- uint32_t texture_id = resource_to_texture_id_map_[resource.id]; |
- DCHECK_NE(0u, texture_id); |
- resource_to_texture_id_map_.erase(resource.id); |
- gl->DeleteTextures(1, &texture_id); |
- } |
-} |
- |
-void BitmapUploader::SetTreeActivationCallback(const base::Closure& callback) { |
- // TODO(fsamuel): Implement this. |
-} |
- |
-void BitmapUploader::DidReceiveCompositorFrameAck() { |
- // TODO(fsamuel): Implement this. |
-} |
- |
-void BitmapUploader::DidLoseCompositorFrameSink() { |
- // TODO(fsamuel): Implement this. |
-} |
- |
-void BitmapUploader::OnDraw(const gfx::Transform& transform, |
- const gfx::Rect& viewport, |
- bool resourceless_software_draw) { |
- // TODO(fsamuel): Implement this. |
-} |
- |
-void BitmapUploader::SetMemoryPolicy(const cc::ManagedMemoryPolicy& policy) { |
- // TODO(fsamuel): Implement this. |
-} |
- |
-void BitmapUploader::SetExternalTilePriorityConstraints( |
- const gfx::Rect& viewport_rect, |
- const gfx::Transform& transform) { |
- // TODO(fsamuel): Implement this. |
-} |
- |
-} // namespace ui |