| Index: ppapi/proxy/compositor_resource.cc
|
| diff --git a/ppapi/proxy/compositor_resource.cc b/ppapi/proxy/compositor_resource.cc
|
| index 3ada734849839aca56078ac7e3859b6d574df1a6..443d7a949e977bab3394e8e7c0fe181d02eed7ac 100644
|
| --- a/ppapi/proxy/compositor_resource.cc
|
| +++ b/ppapi/proxy/compositor_resource.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/logging.h"
|
| #include "ppapi/proxy/ppapi_messages.h"
|
| +#include "ppapi/thunk/enter.h"
|
|
|
| namespace ppapi {
|
| namespace proxy {
|
| @@ -18,8 +19,25 @@ CompositorResource::CompositorResource(Connection connection,
|
| SendCreate(RENDERER, PpapiHostMsg_Compositor_Create());
|
| }
|
|
|
| +bool CompositorResource::IsInProgress() const {
|
| + ProxyLock::AssertAcquiredDebugOnly();
|
| + return TrackedCallback::IsPending(commit_callback_);
|
| +}
|
| +
|
| +int32_t CompositorResource::GenerateResourceId() const {
|
| + ProxyLock::AssertAcquiredDebugOnly();
|
| + return ++last_resource_id_;
|
| +}
|
| +
|
| CompositorResource::~CompositorResource() {
|
| - ResetLayersInternal();
|
| + ResetLayersInternal(true);
|
| +
|
| + // Abort all release callbacks.
|
| + for (ReleaseCallbackMap::iterator it = release_callback_map_.begin();
|
| + it != release_callback_map_.end(); ++it) {
|
| + if (!it->second.is_null())
|
| + it->second.Run(PP_ERROR_ABORTED, 0, false);
|
| + }
|
| }
|
|
|
| thunk::PPB_Compositor_API* CompositorResource::AsPPB_Compositor_API() {
|
| @@ -74,7 +92,8 @@ int32_t CompositorResource::CommitLayers(
|
| int32_t CompositorResource::ResetLayers() {
|
| if (IsInProgress())
|
| return PP_ERROR_INPROGRESS;
|
| - ResetLayersInternal();
|
| +
|
| + ResetLayersInternal(false);
|
| return PP_OK;
|
| }
|
|
|
| @@ -112,16 +131,16 @@ void CompositorResource::OnPluginMsgReleaseResource(
|
| ReleaseCallbackMap::iterator it = release_callback_map_.find(id);
|
| DCHECK(it != release_callback_map_.end()) <<
|
| "Can not found release_callback_ by id(" << id << ")!";
|
| - it->second.Run(sync_point, is_lost);
|
| + it->second.Run(PP_OK, sync_point, is_lost);
|
| release_callback_map_.erase(it);
|
| }
|
|
|
| -void CompositorResource::ResetLayersInternal() {
|
| +void CompositorResource::ResetLayersInternal(bool is_aborted) {
|
| for (LayerList::iterator it = layers_.begin();
|
| it != layers_.end(); ++it) {
|
| ReleaseCallback release_callback = (*it)->release_callback();
|
| if (!release_callback.is_null()) {
|
| - release_callback.Run(0, false);
|
| + release_callback.Run(is_aborted ? PP_ERROR_ABORTED : PP_OK, 0, false);
|
| (*it)->ResetReleaseCallback();
|
| }
|
| (*it)->Invalidate();
|
|
|