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

Unified Diff: components/mus/public/cpp/lib/command_buffer_client_impl.cc

Issue 2119963002: Move mus to //services/ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: components/mus/public/cpp/lib/command_buffer_client_impl.cc
diff --git a/components/mus/public/cpp/lib/command_buffer_client_impl.cc b/components/mus/public/cpp/lib/command_buffer_client_impl.cc
deleted file mode 100644
index 062c3f784779dbc80df7b3b59ca2c511960ab66f..0000000000000000000000000000000000000000
--- a/components/mus/public/cpp/lib/command_buffer_client_impl.cc
+++ /dev/null
@@ -1,370 +0,0 @@
-// Copyright 2014 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 "components/mus/public/cpp/lib/command_buffer_client_impl.h"
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <limits>
-#include <utility>
-
-#include "base/logging.h"
-#include "base/process/process_handle.h"
-#include "base/threading/thread_restrictions.h"
-#include "components/mus/common/gpu_type_converters.h"
-#include "components/mus/common/mojo_buffer_backing.h"
-#include "components/mus/common/mojo_gpu_memory_buffer.h"
-#include "gpu/command_buffer/client/gpu_control_client.h"
-#include "gpu/command_buffer/common/command_buffer_id.h"
-#include "gpu/command_buffer/common/gpu_memory_buffer_support.h"
-#include "gpu/command_buffer/common/sync_token.h"
-#include "mojo/public/cpp/system/platform_handle.h"
-
-namespace mus {
-
-namespace {
-
-bool CreateAndMapSharedBuffer(size_t size,
- mojo::ScopedSharedBufferMapping* mapping,
- mojo::ScopedSharedBufferHandle* handle) {
- *handle = mojo::SharedBufferHandle::Create(size);
- if (!handle->is_valid())
- return false;
-
- *mapping = (*handle)->Map(size);
- if (!*mapping)
- return false;
-
- return true;
-}
-
-void MakeProgressCallback(gpu::CommandBuffer::State* output,
- const gpu::CommandBuffer::State& input) {
- *output = input;
-}
-
-void InitializeCallback(mus::mojom::CommandBufferInitializeResultPtr* output,
- mus::mojom::CommandBufferInitializeResultPtr input) {
- *output = std::move(input);
-}
-
-} // namespace
-
-CommandBufferClientImpl::CommandBufferClientImpl(
- const std::vector<int32_t>& attribs,
- mus::mojom::CommandBufferPtr command_buffer_ptr)
- : gpu_control_client_(nullptr),
- destroyed_(false),
- attribs_(attribs),
- client_binding_(this),
- command_buffer_(std::move(command_buffer_ptr)),
- command_buffer_id_(),
- last_put_offset_(-1),
- next_transfer_buffer_id_(0),
- next_image_id_(0),
- next_fence_sync_release_(1),
- flushed_fence_sync_release_(0) {
- command_buffer_.set_connection_error_handler(
- base::Bind(&CommandBufferClientImpl::Destroyed, base::Unretained(this),
- gpu::error::kUnknown, gpu::error::kLostContext));
-}
-
-CommandBufferClientImpl::~CommandBufferClientImpl() {}
-
-bool CommandBufferClientImpl::Initialize() {
- const size_t kSharedStateSize = sizeof(gpu::CommandBufferSharedState);
- mojo::ScopedSharedBufferHandle handle;
- bool result =
- CreateAndMapSharedBuffer(kSharedStateSize, &shared_state_, &handle);
- if (!result)
- return false;
-
- shared_state()->Initialize();
-
- mus::mojom::CommandBufferClientPtr client_ptr;
- client_binding_.Bind(GetProxy(&client_ptr));
-
- mus::mojom::CommandBufferInitializeResultPtr initialize_result;
- command_buffer_->Initialize(
- std::move(client_ptr), std::move(handle),
- mojo::Array<int32_t>::From(attribs_),
- base::Bind(&InitializeCallback, &initialize_result));
-
- base::ThreadRestrictions::ScopedAllowWait wait;
- if (!command_buffer_.WaitForIncomingResponse()) {
- VLOG(1) << "Channel encountered error while creating command buffer.";
- return false;
- }
-
- if (!initialize_result) {
- VLOG(1) << "Command buffer cannot be initialized successfully.";
- return false;
- }
-
- DCHECK_EQ(gpu::CommandBufferNamespace::MOJO,
- initialize_result->command_buffer_namespace);
- command_buffer_id_ = gpu::CommandBufferId::FromUnsafeValue(
- initialize_result->command_buffer_id);
- capabilities_ = initialize_result->capabilities;
- return true;
-}
-
-gpu::CommandBuffer::State CommandBufferClientImpl::GetLastState() {
- return last_state_;
-}
-
-int32_t CommandBufferClientImpl::GetLastToken() {
- TryUpdateState();
- return last_state_.token;
-}
-
-void CommandBufferClientImpl::Flush(int32_t put_offset) {
- if (last_put_offset_ == put_offset)
- return;
-
- last_put_offset_ = put_offset;
- command_buffer_->Flush(put_offset);
- flushed_fence_sync_release_ = next_fence_sync_release_ - 1;
-}
-
-void CommandBufferClientImpl::OrderingBarrier(int32_t put_offset) {
- // TODO(jamesr): Implement this more efficiently.
- Flush(put_offset);
-}
-
-void CommandBufferClientImpl::WaitForTokenInRange(int32_t start, int32_t end) {
- TryUpdateState();
- while (!InRange(start, end, last_state_.token) &&
- last_state_.error == gpu::error::kNoError) {
- MakeProgressAndUpdateState();
- }
-}
-
-void CommandBufferClientImpl::WaitForGetOffsetInRange(int32_t start,
- int32_t end) {
- TryUpdateState();
- while (!InRange(start, end, last_state_.get_offset) &&
- last_state_.error == gpu::error::kNoError) {
- MakeProgressAndUpdateState();
- }
-}
-
-void CommandBufferClientImpl::SetGetBuffer(int32_t shm_id) {
- command_buffer_->SetGetBuffer(shm_id);
- last_put_offset_ = -1;
-}
-
-scoped_refptr<gpu::Buffer> CommandBufferClientImpl::CreateTransferBuffer(
- size_t size,
- int32_t* id) {
- if (size >= std::numeric_limits<uint32_t>::max())
- return NULL;
-
- mojo::ScopedSharedBufferMapping mapping;
- mojo::ScopedSharedBufferHandle handle;
- if (!CreateAndMapSharedBuffer(size, &mapping, &handle)) {
- if (last_state_.error == gpu::error::kNoError)
- last_state_.error = gpu::error::kLostContext;
- return NULL;
- }
-
- *id = ++next_transfer_buffer_id_;
-
- command_buffer_->RegisterTransferBuffer(*id, std::move(handle),
- static_cast<uint32_t>(size));
-
- std::unique_ptr<gpu::BufferBacking> backing(
- new mus::MojoBufferBacking(std::move(mapping), size));
- scoped_refptr<gpu::Buffer> buffer(new gpu::Buffer(std::move(backing)));
- return buffer;
-}
-
-void CommandBufferClientImpl::DestroyTransferBuffer(int32_t id) {
- command_buffer_->DestroyTransferBuffer(id);
-}
-
-void CommandBufferClientImpl::SetGpuControlClient(gpu::GpuControlClient* c) {
- gpu_control_client_ = c;
-}
-
-gpu::Capabilities CommandBufferClientImpl::GetCapabilities() {
- return capabilities_;
-}
-
-int32_t CommandBufferClientImpl::CreateImage(ClientBuffer buffer,
- size_t width,
- size_t height,
- unsigned internalformat) {
- int32_t new_id = ++next_image_id_;
-
- gfx::Size size(static_cast<int32_t>(width), static_cast<int32_t>(height));
-
- mus::MojoGpuMemoryBufferImpl* gpu_memory_buffer =
- mus::MojoGpuMemoryBufferImpl::FromClientBuffer(buffer);
- gfx::GpuMemoryBufferHandle handle = gpu_memory_buffer->GetHandle();
-
- bool requires_sync_point = false;
- if (handle.type != gfx::SHARED_MEMORY_BUFFER) {
- requires_sync_point = true;
- NOTIMPLEMENTED();
- return -1;
- }
-
- base::SharedMemoryHandle dupd_handle =
- base::SharedMemory::DuplicateHandle(handle.handle);
-#if defined(OS_WIN)
- HANDLE platform_handle = dupd_handle.GetHandle();
-#else
- int platform_handle = dupd_handle.fd;
-#endif
-
- mojo::ScopedHandle scoped_handle = mojo::WrapPlatformFile(platform_handle);
- command_buffer_->CreateImage(
- new_id, std::move(scoped_handle), handle.type, std::move(size),
- static_cast<int32_t>(gpu_memory_buffer->GetFormat()), internalformat);
- if (requires_sync_point) {
- NOTIMPLEMENTED();
- // TODO(jam): need to support this if we support types other than
- // SHARED_MEMORY_BUFFER.
- // gpu_memory_buffer_manager->SetDestructionSyncPoint(gpu_memory_buffer,
- // InsertSyncPoint());
- }
-
- return new_id;
-}
-
-void CommandBufferClientImpl::DestroyImage(int32_t id) {
- command_buffer_->DestroyImage(id);
-}
-
-int32_t CommandBufferClientImpl::CreateGpuMemoryBufferImage(
- size_t width,
- size_t height,
- unsigned internalformat,
- unsigned usage) {
- std::unique_ptr<gfx::GpuMemoryBuffer> buffer(
- mus::MojoGpuMemoryBufferImpl::Create(
- gfx::Size(static_cast<int>(width), static_cast<int>(height)),
- gpu::DefaultBufferFormatForImageFormat(internalformat),
- gfx::BufferUsage::SCANOUT));
- if (!buffer)
- return -1;
-
- return CreateImage(buffer->AsClientBuffer(), width, height, internalformat);
-}
-
-int32_t CommandBufferClientImpl::GetImageGpuMemoryBufferId(unsigned image_id) {
- // TODO(erikchen): Once this class supports IOSurface GpuMemoryBuffer backed
- // images, it will also need to keep a local cache from image id to
- // GpuMemoryBuffer id.
- NOTIMPLEMENTED();
- return -1;
-}
-
-void CommandBufferClientImpl::SignalQuery(uint32_t query,
- const base::Closure& callback) {
- // TODO(piman)
- NOTIMPLEMENTED();
-}
-
-void CommandBufferClientImpl::Destroyed(int32_t lost_reason, int32_t error) {
- if (destroyed_)
- return;
- last_state_.context_lost_reason =
- static_cast<gpu::error::ContextLostReason>(lost_reason);
- last_state_.error = static_cast<gpu::error::Error>(error);
- if (gpu_control_client_)
- gpu_control_client_->OnGpuControlLostContext();
- destroyed_ = true;
-}
-
-void CommandBufferClientImpl::SignalAck(uint32_t id) {}
-
-void CommandBufferClientImpl::SwapBuffersCompleted(int32_t result) {}
-
-void CommandBufferClientImpl::UpdateState(
- const gpu::CommandBuffer::State& state) {}
-
-void CommandBufferClientImpl::UpdateVSyncParameters(int64_t timebase,
- int64_t interval) {}
-
-void CommandBufferClientImpl::TryUpdateState() {
- if (last_state_.error == gpu::error::kNoError)
- shared_state()->Read(&last_state_);
-}
-
-void CommandBufferClientImpl::MakeProgressAndUpdateState() {
- gpu::CommandBuffer::State state;
- command_buffer_->MakeProgress(last_state_.get_offset,
- base::Bind(&MakeProgressCallback, &state));
-
- base::ThreadRestrictions::ScopedAllowWait wait;
- if (!command_buffer_.WaitForIncomingResponse()) {
- VLOG(1) << "Channel encountered error while waiting for command buffer.";
- // TODO(piman): is it ok for this to re-enter?
- Destroyed(gpu::error::kUnknown, gpu::error::kLostContext);
- return;
- }
-
- if (state.generation - last_state_.generation < 0x80000000U)
- last_state_ = state;
-}
-
-void CommandBufferClientImpl::SetLock(base::Lock* lock) {}
-
-void CommandBufferClientImpl::EnsureWorkVisible() {
- // This is only relevant for out-of-process command buffers.
-}
-
-gpu::CommandBufferNamespace CommandBufferClientImpl::GetNamespaceID() const {
- return gpu::CommandBufferNamespace::MOJO;
-}
-
-gpu::CommandBufferId CommandBufferClientImpl::GetCommandBufferID() const {
- return command_buffer_id_;
-}
-
-int32_t CommandBufferClientImpl::GetExtraCommandBufferData() const {
- return 0;
-}
-
-uint64_t CommandBufferClientImpl::GenerateFenceSyncRelease() {
- return next_fence_sync_release_++;
-}
-
-bool CommandBufferClientImpl::IsFenceSyncRelease(uint64_t release) {
- return release != 0 && release < next_fence_sync_release_;
-}
-
-bool CommandBufferClientImpl::IsFenceSyncFlushed(uint64_t release) {
- return release != 0 && release <= flushed_fence_sync_release_;
-}
-
-bool CommandBufferClientImpl::IsFenceSyncFlushReceived(uint64_t release) {
- return IsFenceSyncFlushed(release);
-}
-
-void CommandBufferClientImpl::SignalSyncToken(const gpu::SyncToken& sync_token,
- const base::Closure& callback) {
- // TODO(dyen)
- NOTIMPLEMENTED();
-}
-
-bool CommandBufferClientImpl::CanWaitUnverifiedSyncToken(
- const gpu::SyncToken* sync_token) {
- // Right now, MOJO_LOCAL is only used by trusted code, so it is safe to wait
- // on a sync token in MOJO_LOCAL command buffer.
- if (sync_token->namespace_id() == gpu::CommandBufferNamespace::MOJO_LOCAL)
- return true;
-
- // It is also safe to wait on the same context.
- if (sync_token->namespace_id() == gpu::CommandBufferNamespace::MOJO &&
- sync_token->command_buffer_id() == GetCommandBufferID())
- return true;
-
- return false;
-}
-
-} // namespace mus
« no previous file with comments | « components/mus/public/cpp/lib/command_buffer_client_impl.h ('k') | components/mus/public/cpp/lib/context_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698