From ccb5156473166f7626408997c7a7c8ec124f1682 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Fri, 17 May 2019 18:01:09 -0700 Subject: [PATCH 1/3] make drain perform cleanup --- flow/skia_gpu_object.cc | 11 +++++++++-- flow/skia_gpu_object.h | 5 ++++- shell/common/shell_io_manager.cc | 3 ++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/flow/skia_gpu_object.cc b/flow/skia_gpu_object.cc index bf1b0a1d2a779..204ce31bb3bb5 100644 --- a/flow/skia_gpu_object.cc +++ b/flow/skia_gpu_object.cc @@ -6,12 +6,16 @@ #include "flutter/fml/message_loop.h" +#include + namespace flutter { SkiaUnrefQueue::SkiaUnrefQueue(fml::RefPtr task_runner, - fml::TimeDelta delay) + fml::TimeDelta delay, + fml::WeakPtr context) : task_runner_(std::move(task_runner)), drain_delay_(delay), + context_(context), drain_pending_(false) {} SkiaUnrefQueue::~SkiaUnrefQueue() { @@ -35,10 +39,13 @@ void SkiaUnrefQueue::Drain() { objects_.swap(skia_objects); drain_pending_ = false; } - + FML_DLOG(ERROR) << "Drain"; for (SkRefCnt* skia_object : skia_objects) { skia_object->unref(); } + if (context_) { + context_->performDeferredCleanup(std::chrono::milliseconds(250)); + } } } // namespace flutter diff --git a/flow/skia_gpu_object.h b/flow/skia_gpu_object.h index 4c079af96ee95..77de3d7522478 100644 --- a/flow/skia_gpu_object.h +++ b/flow/skia_gpu_object.h @@ -12,6 +12,7 @@ #include "flutter/fml/memory/weak_ptr.h" #include "flutter/fml/task_runner.h" #include "third_party/skia/include/core/SkRefCnt.h" +#include "third_party/skia/include/gpu/GrContext.h" namespace flutter { @@ -31,12 +32,14 @@ class SkiaUnrefQueue : public fml::RefCountedThreadSafe { private: const fml::RefPtr task_runner_; const fml::TimeDelta drain_delay_; + const fml::WeakPtr context_; std::mutex mutex_; std::deque objects_; bool drain_pending_; SkiaUnrefQueue(fml::RefPtr task_runner, - fml::TimeDelta delay); + fml::TimeDelta delay, + fml::WeakPtr context); ~SkiaUnrefQueue(); diff --git a/shell/common/shell_io_manager.cc b/shell/common/shell_io_manager.cc index f1155c2e883a0..3817b72e89838 100644 --- a/shell/common/shell_io_manager.cc +++ b/shell/common/shell_io_manager.cc @@ -52,7 +52,8 @@ ShellIOManager::ShellIOManager( : nullptr), unref_queue_(fml::MakeRefCounted( std::move(unref_queue_task_runner), - fml::TimeDelta::FromMilliseconds(250))), + fml::TimeDelta::FromMilliseconds(250), + resource_context_weak_factory_->GetWeakPtr())), weak_factory_(this) { if (!resource_context_) { #ifndef OS_FUCHSIA From 7947a3a24725cea33543e5d4f90d8b1a8ff54386 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Wed, 29 May 2019 23:21:09 -0700 Subject: [PATCH 2/3] Update skia_gpu_object.cc --- flow/skia_gpu_object.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/flow/skia_gpu_object.cc b/flow/skia_gpu_object.cc index 204ce31bb3bb5..8ded9c5dd40ca 100644 --- a/flow/skia_gpu_object.cc +++ b/flow/skia_gpu_object.cc @@ -39,7 +39,6 @@ void SkiaUnrefQueue::Drain() { objects_.swap(skia_objects); drain_pending_ = false; } - FML_DLOG(ERROR) << "Drain"; for (SkRefCnt* skia_object : skia_objects) { skia_object->unref(); } From 6bf8635000782f5e21052db80cb28ac8b337b87c Mon Sep 17 00:00:00 2001 From: Dan Field Date: Wed, 29 May 2019 23:21:39 -0700 Subject: [PATCH 3/3] Update skia_gpu_object.cc --- flow/skia_gpu_object.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/flow/skia_gpu_object.cc b/flow/skia_gpu_object.cc index 8ded9c5dd40ca..4ac7d31ed8c3e 100644 --- a/flow/skia_gpu_object.cc +++ b/flow/skia_gpu_object.cc @@ -39,6 +39,7 @@ void SkiaUnrefQueue::Drain() { objects_.swap(skia_objects); drain_pending_ = false; } + for (SkRefCnt* skia_object : skia_objects) { skia_object->unref(); }