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