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

Unified Diff: cc/resources/video_resource_updater.cc

Issue 14925009: Run all LayerTreeHost tests with a delegating renderer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: uber-unittests: for landing2 Created 7 years, 7 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
« no previous file with comments | « cc/resources/video_resource_updater.h ('k') | cc/test/layer_tree_pixel_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/video_resource_updater.cc
diff --git a/cc/resources/video_resource_updater.cc b/cc/resources/video_resource_updater.cc
index 9aa3644f1744699c694928c506c945d097fe5941..a171cb7e42e5849089e74b00cd4b15c49b27e705 100644
--- a/cc/resources/video_resource_updater.cc
+++ b/cc/resources/video_resource_updater.cc
@@ -29,9 +29,9 @@ VideoResourceUpdater::VideoResourceUpdater(ResourceProvider* resource_provider)
}
VideoResourceUpdater::~VideoResourceUpdater() {
- while (!recycled_resources_.empty()) {
- resource_provider_->DeleteResource(recycled_resources_.back().resource_id);
- recycled_resources_.pop_back();
+ while (!all_resources_.empty()) {
+ resource_provider_->DeleteResource(all_resources_.back());
+ all_resources_.pop_back();
}
}
@@ -176,6 +176,8 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForSoftwarePlanes(
resource_provider_->CreateResource(output_plane_resource_size,
output_resource_format,
ResourceProvider::TextureUsageAny);
+ if (resource_id)
+ all_resources_.push_back(resource_id);
}
if (resource_id == 0) {
@@ -330,9 +332,12 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes(
resource_provider_->CreateResourceFromExternalTexture(
video_frame->texture_target(),
video_frame->texture_id());
+ if (external_resources.hardware_resource)
+ all_resources_.push_back(external_resources.hardware_resource);
TextureMailbox::ReleaseCallback callback_to_return_resource =
base::Bind(&ReturnTexture,
+ AsWeakPtr(),
base::Unretained(resource_provider_),
external_resources.hardware_resource);
external_resources.hardware_release_callback = callback_to_return_resource;
@@ -341,11 +346,21 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes(
// static
void VideoResourceUpdater::ReturnTexture(
+ base::WeakPtr<VideoResourceUpdater> updater,
ResourceProvider* resource_provider,
unsigned resource_id,
unsigned sync_point,
bool lost_resource) {
+ if (!updater) {
+ // Resource was already deleted.
+ return;
+ }
+
resource_provider->DeleteResource(resource_id);
+ std::vector<unsigned>& all_resources = updater->all_resources_;
+ all_resources.erase(std::remove(all_resources.begin(),
+ all_resources.end(),
+ resource_id));
}
// static
@@ -355,10 +370,15 @@ void VideoResourceUpdater::RecycleResource(
RecycleResourceData data,
unsigned sync_point,
bool lost_resource) {
+ if (!updater) {
+ // Resource was already deleted.
+ return;
+ }
+
WebKit::WebGraphicsContext3D* context =
resource_provider->GraphicsContext3D();
if (context && sync_point)
- GLC(context, context->waitSyncPoint(sync_point));
+ GLC(context, context->waitSyncPoint(sync_point));
if (context && !lost_resource) {
ResourceProvider::ScopedWriteLockGL lock(resource_provider,
data.resource_id);
@@ -368,8 +388,12 @@ void VideoResourceUpdater::RecycleResource(
GLC(context, context->bindTexture(GL_TEXTURE_2D, 0));
}
- if (!updater || lost_resource) {
+ if (lost_resource) {
resource_provider->DeleteResource(data.resource_id);
+ std::vector<unsigned>& all_resources = updater->all_resources_;
+ all_resources.erase(std::remove(all_resources.begin(),
+ all_resources.end(),
+ data.resource_id));
return;
}
« no previous file with comments | « cc/resources/video_resource_updater.h ('k') | cc/test/layer_tree_pixel_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698