Index: content/child/child_thread_impl.cc |
diff --git a/content/child/child_thread_impl.cc b/content/child/child_thread_impl.cc |
index 2fba1bee8a04cd46510cc2a77c281ca2774dee5b..7f2755b3e00f3859bfe499adb57561c2686db6ca 100644 |
--- a/content/child/child_thread_impl.cc |
+++ b/content/child/child_thread_impl.cc |
@@ -32,6 +32,7 @@ |
#include "base/timer/elapsed_timer.h" |
#include "base/tracked_objects.h" |
#include "build/build_config.h" |
+#include "components/discardable_memory/client/client_discardable_shared_memory_manager.h" |
#include "components/tracing/child/child_trace_message_filter.h" |
#include "content/child/child_histogram_message_filter.h" |
#include "content/child/child_process.h" |
@@ -317,7 +318,8 @@ |
} |
ChildThreadImpl::Options::Builder& |
-ChildThreadImpl::Options::Builder::ConnectToBrowser(bool connect_to_browser) { |
+ChildThreadImpl::Options::Builder::ConnectToBrowser( |
+ bool connect_to_browser) { |
options_.connect_to_browser = connect_to_browser; |
return *this; |
} |
@@ -353,6 +355,33 @@ |
#endif |
return handled; |
} |
+ |
+class ChildThreadImpl::ClientDiscardableSharedMemoryManagerDelegate |
+ : public discardable_memory::ClientDiscardableSharedMemoryManager:: |
+ Delegate { |
+ public: |
+ explicit ClientDiscardableSharedMemoryManagerDelegate( |
+ scoped_refptr<ThreadSafeSender> sender) |
+ : sender_(sender) {} |
+ ~ClientDiscardableSharedMemoryManagerDelegate() override {} |
+ |
+ void AllocateLockedDiscardableSharedMemory( |
+ size_t size, |
+ discardable_memory::DiscardableSharedMemoryId id, |
+ base::SharedMemoryHandle* handle) override { |
+ sender_->Send( |
+ new ChildProcessHostMsg_SyncAllocateLockedDiscardableSharedMemory( |
+ size, id, handle)); |
+ } |
+ |
+ void DeletedDiscardableSharedMemory( |
+ discardable_memory::DiscardableSharedMemoryId id) override { |
+ sender_->Send(new ChildProcessHostMsg_DeletedDiscardableSharedMemory(id)); |
+ } |
+ |
+ private: |
+ scoped_refptr<ThreadSafeSender> sender_; |
+}; |
ChildThreadImpl::ChildThreadImpl() |
: route_provider_binding_(this), |
@@ -377,7 +406,7 @@ |
Init(options); |
} |
-scoped_refptr<base::SingleThreadTaskRunner> ChildThreadImpl::GetIOTaskRunner() { |
+scoped_refptr<base::SequencedTaskRunner> ChildThreadImpl::GetIOTaskRunner() { |
if (IsInBrowserProcess()) |
return browser_process_io_runner_; |
return ChildProcess::current()->io_task_runner(); |
@@ -564,6 +593,13 @@ |
shared_bitmap_manager_.reset( |
new ChildSharedBitmapManager(thread_safe_sender())); |
+ |
+ client_discardable_shared_memory_manager_delegate_ = |
+ base::MakeUnique<ClientDiscardableSharedMemoryManagerDelegate>( |
+ thread_safe_sender()); |
+ discardable_shared_memory_manager_ = base::MakeUnique< |
+ discardable_memory::ClientDiscardableSharedMemoryManager>( |
+ client_discardable_shared_memory_manager_delegate_.get()); |
} |
ChildThreadImpl::~ChildThreadImpl() { |
@@ -592,6 +628,10 @@ |
file_system_dispatcher_.reset(); |
quota_dispatcher_.reset(); |
WebFileSystemImpl::DeleteThreadSpecificInstance(); |
+} |
+ |
+void ChildThreadImpl::ShutdownDiscardableSharedMemoryManager() { |
+ discardable_shared_memory_manager_.reset(); |
} |
void ChildThreadImpl::OnChannelConnected(int32_t peer_pid) { |