summaryrefslogtreecommitdiffstats
path: root/base/shared_memory_android.cc
diff options
context:
space:
mode:
authormichaelbai@google.com <michaelbai@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-21 22:34:50 +0000
committermichaelbai@google.com <michaelbai@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-21 22:34:50 +0000
commitf7d6997f6253e4c7645859757bc824c4164a9a7e (patch)
tree3183103533b527bb8b436aed5412b7bf00207e94 /base/shared_memory_android.cc
parent559c4e3eee40f9f3a127ba792a2ef0bcd217b543 (diff)
downloadchromium_src-f7d6997f6253e4c7645859757bc824c4164a9a7e.zip
chromium_src-f7d6997f6253e4c7645859757bc824c4164a9a7e.tar.gz
chromium_src-f7d6997f6253e4c7645859757bc824c4164a9a7e.tar.bz2
Upstream android file related code.
Implemented file related features BUG=None TEST=None Review URL: http://codereview.chromium.org/7184032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@89914 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/shared_memory_android.cc')
-rw-r--r--base/shared_memory_android.cc53
1 files changed, 53 insertions, 0 deletions
diff --git a/base/shared_memory_android.cc b/base/shared_memory_android.cc
new file mode 100644
index 0000000..c2f3315
--- /dev/null
+++ b/base/shared_memory_android.cc
@@ -0,0 +1,53 @@
+// Copyright (c) 2011 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 "base/shared_memory.h"
+
+#include <sys/mman.h>
+
+#include "base/logging.h"
+#include "third_party/ashmem/ashmem.h"
+
+namespace base {
+
+// For Android, we use ashmem to implement SharedMemory. ashmem_create_region
+// will automatically pin the region. We never explicitly call pin/unpin. When
+// all the file descriptors from different processes associated with the region
+// are closed, the memory buffer will go away.
+
+bool SharedMemory::CreateNamed(const std::string& name,
+ bool open_existing, uint32 size) {
+ DCHECK_EQ(-1, mapped_file_ );
+
+ // "name" is just a label in ashmem. It is visible in /proc/pid/maps.
+ mapped_file_ = ashmem_create_region(name.c_str(), size);
+ if (-1 == mapped_file_) {
+ DLOG(ERROR) << "Shared memory creation failed";
+ return false;
+ }
+
+ int err = ashmem_set_prot_region(mapped_file_,
+ PROT_READ | PROT_WRITE | PROT_EXEC);
+ if (err < 0) {
+ DLOG(ERROR) << "Error " << err << " when setting protection of ashmem";
+ return false;
+ }
+ created_size_ = size;
+
+ return true;
+}
+
+bool SharedMemory::Delete(const std::string& name) {
+ // ashmem doesn't support name mapping
+ NOTIMPLEMENTED();
+ return false;
+}
+
+bool SharedMemory::Open(const std::string& name, bool read_only) {
+ // ashmem doesn't support name mapping
+ NOTIMPLEMENTED();
+ return false;
+}
+
+} // namespace base