| Index: webkit/common/gpu/context_provider_in_process.cc
|
| diff --git a/webkit/common/gpu/context_provider_in_process.cc b/webkit/common/gpu/context_provider_in_process.cc
|
| index 1e42ab04d6bf2dfeae5aeb7d1056ef2b7b38bb44..9b4352fc0f0bb10ff3ee7c21f9ed43ade270433c 100644
|
| --- a/webkit/common/gpu/context_provider_in_process.cc
|
| +++ b/webkit/common/gpu/context_provider_in_process.cc
|
| @@ -6,8 +6,9 @@
|
|
|
| #include "base/bind.h"
|
| #include "base/callback_helpers.h"
|
| +#include "cc/output/managed_memory_policy.h"
|
| #include "webkit/common/gpu/grcontext_for_webgraphicscontext3d.h"
|
| -#include "webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h"
|
| +#include "webkit/common/gpu/managed_memory_policy_convert.h"
|
|
|
| namespace webkit {
|
| namespace gpu {
|
| @@ -32,6 +33,27 @@ class ContextProviderInProcess::LostContextCallbackProxy
|
| ContextProviderInProcess* provider_;
|
| };
|
|
|
| +class ContextProviderInProcess::SwapBuffersCompleteCallbackProxy
|
| + : public WebKit::WebGraphicsContext3D::
|
| + WebGraphicsSwapBuffersCompleteCallbackCHROMIUM {
|
| + public:
|
| + explicit SwapBuffersCompleteCallbackProxy(ContextProviderInProcess* provider)
|
| + : provider_(provider) {
|
| + provider_->context3d_->setSwapBuffersCompleteCallbackCHROMIUM(this);
|
| + }
|
| +
|
| + virtual ~SwapBuffersCompleteCallbackProxy() {
|
| + provider_->context3d_->setSwapBuffersCompleteCallbackCHROMIUM(NULL);
|
| + }
|
| +
|
| + virtual void onSwapBuffersComplete() {
|
| + provider_->OnSwapBuffersComplete();
|
| + }
|
| +
|
| + private:
|
| + ContextProviderInProcess* provider_;
|
| +};
|
| +
|
| class ContextProviderInProcess::MemoryAllocationCallbackProxy
|
| : public WebKit::WebGraphicsContext3D::
|
| WebGraphicsMemoryAllocationChangedCallbackCHROMIUM {
|
| @@ -46,8 +68,8 @@ class ContextProviderInProcess::MemoryAllocationCallbackProxy
|
| }
|
|
|
| virtual void onMemoryAllocationChanged(
|
| - WebKit::WebGraphicsMemoryAllocation alloc) {
|
| - provider_->OnMemoryAllocationChanged(!!alloc.gpuResourceSizeInBytes);
|
| + WebKit::WebGraphicsMemoryAllocation allocation) {
|
| + provider_->OnMemoryAllocationChanged(allocation);
|
| }
|
|
|
| private:
|
| @@ -117,10 +139,15 @@ bool ContextProviderInProcess::BindToCurrentThread() {
|
| return false;
|
|
|
| lost_context_callback_proxy_.reset(new LostContextCallbackProxy(this));
|
| + swap_buffers_complete_callback_proxy_.reset(
|
| + new SwapBuffersCompleteCallbackProxy(this));
|
| + memory_allocation_callback_proxy_.reset(
|
| + new MemoryAllocationCallbackProxy(this));
|
| return true;
|
| }
|
|
|
| -WebKit::WebGraphicsContext3D* ContextProviderInProcess::Context3d() {
|
| +webkit::gpu::WebGraphicsContext3DInProcessCommandBufferImpl*
|
| +ContextProviderInProcess::Context3d() {
|
| DCHECK(context3d_);
|
| DCHECK(lost_context_callback_proxy_); // Is bound to thread.
|
| DCHECK(context_thread_checker_.CalledOnValidThread());
|
| @@ -138,8 +165,6 @@ class GrContext* ContextProviderInProcess::GrContext() {
|
|
|
| gr_context_.reset(
|
| new webkit::gpu::GrContextForWebGraphicsContext3D(context3d_.get()));
|
| - memory_allocation_callback_proxy_.reset(
|
| - new MemoryAllocationCallbackProxy(this));
|
| return gr_context_->get();
|
| }
|
|
|
| @@ -164,6 +189,33 @@ void ContextProviderInProcess::OnLostContext() {
|
| base::ResetAndReturn(&lost_context_callback_).Run();
|
| }
|
|
|
| +void ContextProviderInProcess::OnSwapBuffersComplete() {
|
| + DCHECK(context_thread_checker_.CalledOnValidThread());
|
| + if (!swap_buffers_complete_callback_.is_null())
|
| + swap_buffers_complete_callback_.Run();
|
| +}
|
| +
|
| +void ContextProviderInProcess::OnMemoryAllocationChanged(
|
| + const WebKit::WebGraphicsMemoryAllocation& allocation) {
|
| + DCHECK(context_thread_checker_.CalledOnValidThread());
|
| +
|
| + if (gr_context_) {
|
| + bool nonzero_allocation = !!allocation.gpuResourceSizeInBytes;
|
| + gr_context_->SetMemoryLimit(nonzero_allocation);
|
| + }
|
| +
|
| + if (memory_policy_changed_callback_.is_null())
|
| + return;
|
| +
|
| + bool discard_backbuffer_when_not_visible;
|
| + cc::ManagedMemoryPolicy policy =
|
| + ManagedMemoryPolicyConvert::Convert(allocation,
|
| + &discard_backbuffer_when_not_visible);
|
| +
|
| + memory_policy_changed_callback_.Run(
|
| + policy, discard_backbuffer_when_not_visible);
|
| +}
|
| +
|
| bool ContextProviderInProcess::DestroyedOnMainThread() {
|
| DCHECK(main_thread_checker_.CalledOnValidThread());
|
|
|
| @@ -174,15 +226,25 @@ bool ContextProviderInProcess::DestroyedOnMainThread() {
|
| void ContextProviderInProcess::SetLostContextCallback(
|
| const LostContextCallback& lost_context_callback) {
|
| DCHECK(context_thread_checker_.CalledOnValidThread());
|
| - DCHECK(lost_context_callback_.is_null());
|
| + DCHECK(lost_context_callback_.is_null() ||
|
| + lost_context_callback.is_null());
|
| lost_context_callback_ = lost_context_callback;
|
| }
|
|
|
| -void ContextProviderInProcess::OnMemoryAllocationChanged(
|
| - bool nonzero_allocation) {
|
| +void ContextProviderInProcess::SetSwapBuffersCompleteCallback(
|
| + const SwapBuffersCompleteCallback& swap_buffers_complete_callback) {
|
| DCHECK(context_thread_checker_.CalledOnValidThread());
|
| - if (gr_context_)
|
| - gr_context_->SetMemoryLimit(nonzero_allocation);
|
| + DCHECK(swap_buffers_complete_callback_.is_null() ||
|
| + swap_buffers_complete_callback.is_null());
|
| + swap_buffers_complete_callback_ = swap_buffers_complete_callback;
|
| +}
|
| +
|
| +void ContextProviderInProcess::SetMemoryPolicyChangedCallback(
|
| + const MemoryPolicyChangedCallback& memory_policy_changed_callback) {
|
| + DCHECK(context_thread_checker_.CalledOnValidThread());
|
| + DCHECK(memory_policy_changed_callback_.is_null() ||
|
| + memory_policy_changed_callback.is_null());
|
| + memory_policy_changed_callback_ = memory_policy_changed_callback;
|
| }
|
|
|
| } // namespace gpu
|
|
|