mapping_table.h revision e5d81f57cb97b3b6b7fccc9c5610d21eb81db09d
1e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// found in the LICENSE file.
4e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#ifndef MOJO_SYSTEM_MAPPING_TABLE_H_
6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#define MOJO_SYSTEM_MAPPING_TABLE_H_
7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include <stdint.h>
9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include <vector>
11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/containers/hash_tables.h"
13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/macros.h"
14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/memory/scoped_ptr.h"
15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "mojo/public/c/system/core.h"
16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "mojo/system/system_impl_export.h"
17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace mojo {
19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace system {
20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass CoreImpl;
22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass RawSharedBufferMapping;
23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Test-only function (defined/used in embedder/test_embedder.cc). Declared here
25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// so it can be friended.
26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace internal {
27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochbool ShutdownCheckNoLeaks(CoreImpl*);
28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
30e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// This class provides the (global) table of memory mappings (owned by
31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// |CoreImpl|), which maps mapping base addresses to
32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// |RawSharedBuffer::Mapping|s.
33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch//
34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// This class is NOT thread-safe; locking is left to |CoreImpl|.
35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass MOJO_SYSTEM_IMPL_EXPORT MappingTable {
36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public:
37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  MappingTable();
38e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ~MappingTable();
39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  // Tries to add a mapping. (Takes ownership of the mapping in all cases; on
41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  // failure, it will be destroyed.)
42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  MojoResult AddMapping(scoped_ptr<RawSharedBufferMapping> mapping);
43e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  MojoResult RemoveMapping(void* address);
44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch private:
46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  friend bool internal::ShutdownCheckNoLeaks(CoreImpl*);
47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  typedef base::hash_map<uintptr_t, RawSharedBufferMapping*>
49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      AddressToMappingMap;
50e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  AddressToMappingMap address_to_mapping_map_;
51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  DISALLOW_COPY_AND_ASSIGN(MappingTable);
53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch};
54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}  // namespace system
56e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}  // namespace mojo
57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#endif  // MOJO_SYSTEM_MAPPING_TABLE_H_
59