| Index: cc/tiles/gpu_image_decode_controller.cc
|
| diff --git a/cc/tiles/gpu_image_decode_controller.cc b/cc/tiles/gpu_image_decode_controller.cc
|
| index b7dbd55f116d1900fca133a64d710abf086376a3..69a3327e385edfd4b7b068563bb4316d578efeb7 100644
|
| --- a/cc/tiles/gpu_image_decode_controller.cc
|
| +++ b/cc/tiles/gpu_image_decode_controller.cc
|
| @@ -62,7 +62,7 @@ class ImageDecodeTaskImpl : public TileTask {
|
| ImageDecodeTaskImpl(GpuImageDecodeController* controller,
|
| const DrawImage& draw_image,
|
| const ImageDecodeController::TracingInfo& tracing_info)
|
| - : TileTask(true),
|
| + : TileTask(TileTask::Type::IMAGE_DECODE, true),
|
| controller_(controller),
|
| image_(draw_image),
|
| tracing_info_(tracing_info) {
|
| @@ -76,16 +76,12 @@ class ImageDecodeTaskImpl : public TileTask {
|
| controller_->DecodeImage(image_);
|
| }
|
|
|
| - // Overridden from TileTask:
|
| - void ScheduleOnOriginThread(RasterBufferProvider* provider) override {}
|
| - void CompleteOnOriginThread(RasterBufferProvider* provider) override {
|
| - controller_->DecodeTaskCompleted(image_);
|
| - }
|
| -
|
| protected:
|
| ~ImageDecodeTaskImpl() override {}
|
|
|
| private:
|
| + friend class GpuImageDecodeController;
|
| +
|
| GpuImageDecodeController* controller_;
|
| DrawImage image_;
|
| const ImageDecodeController::TracingInfo tracing_info_;
|
| @@ -102,7 +98,7 @@ class ImageUploadTaskImpl : public TileTask {
|
| const DrawImage& draw_image,
|
| scoped_refptr<TileTask> decode_dependency,
|
| const ImageDecodeController::TracingInfo& tracing_info)
|
| - : TileTask(false),
|
| + : TileTask(TileTask::Type::IMAGE_UPLOAD, false),
|
| controller_(controller),
|
| image_(draw_image),
|
| tracing_info_(tracing_info) {
|
| @@ -120,15 +116,12 @@ class ImageUploadTaskImpl : public TileTask {
|
| controller_->UploadImage(image_);
|
| }
|
|
|
| - void ScheduleOnOriginThread(RasterBufferProvider* provider) override {}
|
| - void CompleteOnOriginThread(RasterBufferProvider* provider) override {
|
| - controller_->UploadTaskCompleted(image_);
|
| - }
|
| -
|
| protected:
|
| ~ImageUploadTaskImpl() override {}
|
|
|
| private:
|
| + friend class GpuImageDecodeController;
|
| +
|
| GpuImageDecodeController* controller_;
|
| DrawImage image_;
|
| const ImageDecodeController::TracingInfo tracing_info_;
|
| @@ -367,6 +360,32 @@ void GpuImageDecodeController::SetShouldAggressivelyFreeResources(
|
| }
|
| }
|
|
|
| +void GpuImageDecodeController::OnImageDecodeTaskCompleted(TileTask* task) {
|
| + base::AutoLock lock(lock_);
|
| + ImageDecodeTaskImpl* decode_task = static_cast<ImageDecodeTaskImpl*>(task);
|
| + DCHECK(decode_task);
|
| + // Decode task is complete, remove it from our list of pending tasks.
|
| + pending_image_decode_tasks_.erase(decode_task->image_.image()->uniqueID());
|
| +
|
| + // While the decode task is active, we keep a ref on the decoded data.
|
| + // Release that ref now.
|
| + UnrefImageDecode(decode_task->image_);
|
| +}
|
| +
|
| +void GpuImageDecodeController::OnImageUploadTaskCompleted(TileTask* task) {
|
| + base::AutoLock lock(lock_);
|
| + ImageUploadTaskImpl* upload_task = static_cast<ImageUploadTaskImpl*>(task);
|
| + DCHECK(upload_task);
|
| + // Upload task is complete, remove it from our list of pending tasks.
|
| + pending_image_upload_tasks_.erase(upload_task->image_.image()->uniqueID());
|
| +
|
| + // While the upload task is active, we keep a ref on both the image it will be
|
| + // populating, as well as the decode it needs to populate it. Release these
|
| + // refs now.
|
| + UnrefImageDecode(upload_task->image_);
|
| + UnrefImageInternal(upload_task->image_);
|
| +}
|
| +
|
| bool GpuImageDecodeController::OnMemoryDump(
|
| const base::trace_event::MemoryDumpArgs& args,
|
| base::trace_event::ProcessMemoryDump* pmd) {
|
| @@ -442,30 +461,6 @@ void GpuImageDecodeController::UploadImage(const DrawImage& draw_image) {
|
| UploadImageIfNecessary(draw_image, found->second.get());
|
| }
|
|
|
| -void GpuImageDecodeController::DecodeTaskCompleted(
|
| - const DrawImage& draw_image) {
|
| - base::AutoLock lock(lock_);
|
| - // Decode task is complete, remove it from our list of pending tasks.
|
| - pending_image_decode_tasks_.erase(draw_image.image()->uniqueID());
|
| -
|
| - // While the decode task is active, we keep a ref on the decoded data.
|
| - // Release that ref now.
|
| - UnrefImageDecode(draw_image);
|
| -}
|
| -
|
| -void GpuImageDecodeController::UploadTaskCompleted(
|
| - const DrawImage& draw_image) {
|
| - base::AutoLock lock(lock_);
|
| - // Upload task is complete, remove it from our list of pending tasks.
|
| - pending_image_upload_tasks_.erase(draw_image.image()->uniqueID());
|
| -
|
| - // While the upload task is active, we keep a ref on both the image it will be
|
| - // populating, as well as the decode it needs to populate it. Release these
|
| - // refs now.
|
| - UnrefImageDecode(draw_image);
|
| - UnrefImageInternal(draw_image);
|
| -}
|
| -
|
| // Checks if an existing image decode exists. If not, returns a task to produce
|
| // the requested decode.
|
| scoped_refptr<TileTask> GpuImageDecodeController::GetImageDecodeTaskAndRef(
|
|
|