Index: components/discardable_memory/service/discardable_shared_memory_manager_proxy.cc |
diff --git a/components/discardable_memory/service/discardable_shared_memory_manager_proxy.cc b/components/discardable_memory/service/discardable_shared_memory_manager_proxy.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f8a09a4fe71b4f2f9e5e42a0c8c087486ab0a682 |
--- /dev/null |
+++ b/components/discardable_memory/service/discardable_shared_memory_manager_proxy.cc |
@@ -0,0 +1,54 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/discardable_memory/service/discardable_shared_memory_manager_proxy.h" |
+ |
+#include "components/discardable_memory/service/discardable_shared_memory_manager.h" |
+#include "mojo/public/cpp/bindings/strong_binding.h" |
+#include "mojo/public/cpp/system/platform_handle.h" |
+ |
+namespace discardable_memory { |
+ |
+namespace { |
+int last_client_id = 0; |
reveman
2016/11/11 20:17:27
Can this be in the ::discardable_memory::Discardab
Peng
2016/11/11 22:50:35
Done.
|
+} |
+ |
+DiscardableSharedMemoryManagerProxy::DiscardableSharedMemoryManagerProxy() |
+ : client_id_(++last_client_id) {} |
+ |
+DiscardableSharedMemoryManagerProxy::~DiscardableSharedMemoryManagerProxy() { |
+ ::discardable_memory::DiscardableSharedMemoryManager::current() |
reveman
2016/11/11 20:17:26
Can this class have a pointer to the manager insta
Peng
2016/11/11 22:50:35
Done.
|
+ ->ClientRemoved(client_id_); |
+} |
+ |
+// static |
+void DiscardableSharedMemoryManagerProxy::Create( |
+ mojom::DiscardableSharedMemoryManagerRequest request) { |
+ mojo::MakeStrongBinding( |
+ base::MakeUnique<DiscardableSharedMemoryManagerProxy>(), |
+ std::move(request)); |
+} |
+ |
+void DiscardableSharedMemoryManagerProxy::AllocateLockedDiscardableSharedMemory( |
+ uint32_t size, |
+ int32_t id, |
+ const AllocateLockedDiscardableSharedMemoryCallback& callback) { |
+ base::SharedMemoryHandle handle; |
+ ::discardable_memory::DiscardableSharedMemoryManager::current() |
+ ->AllocateLockedDiscardableSharedMemoryForClient(client_id_, size, id, |
+ &handle); |
+ mojo::ScopedSharedBufferHandle memory; |
+ if (handle != base::SharedMemory::NULLHandle()) { |
+ memory = mojo::WrapSharedMemoryHandle(handle, size, false /* ready_only */); |
+ } |
+ return callback.Run(std::move(memory)); |
+} |
+ |
+void DiscardableSharedMemoryManagerProxy::DeletedDiscardableSharedMemory( |
+ int32_t id) { |
+ ::discardable_memory::DiscardableSharedMemoryManager::current() |
+ ->ClientDeletedDiscardableSharedMemory(id, client_id_); |
+} |
+ |
+} // namespace discardable_memory |