// Copyright (c) 2013 The LevelDB Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. See the AUTHORS file for names of contributors. #ifndef THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_STDIO_H_ #define THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_STDIO_H_ #include "env_chromium.h" namespace leveldb_env { class ChromiumWritableFile : public leveldb::WritableFile { public: ChromiumWritableFile(const std::string& fname, FILE* f, const UMALogger* uma_logger, WriteTracker* tracker, bool make_backup); virtual ~ChromiumWritableFile(); virtual leveldb::Status Append(const leveldb::Slice& data); virtual leveldb::Status Close(); virtual leveldb::Status Flush(); virtual leveldb::Status Sync(); private: enum Type { kManifest, kTable, kOther }; leveldb::Status SyncParent(); std::string filename_; FILE* file_; const UMALogger* uma_logger_; WriteTracker* tracker_; Type file_type_; std::string parent_dir_; bool make_backup_; }; class ChromiumEnvStdio : public ChromiumEnv { public: ChromiumEnvStdio(); virtual ~ChromiumEnvStdio(); virtual leveldb::Status NewSequentialFile(const std::string& fname, leveldb::SequentialFile** result); virtual leveldb::Status NewRandomAccessFile( const std::string& fname, leveldb::RandomAccessFile** result); virtual leveldb::Status NewWritableFile(const std::string& fname, leveldb::WritableFile** result); virtual leveldb::Status NewLogger(const std::string& fname, leveldb::Logger** result); protected: virtual base::File::Error GetDirectoryEntries( const base::FilePath& dir_param, std::vector<base::FilePath>* result) const; private: // BGThread() is the body of the background thread void BGThread(); static void BGThreadWrapper(void* arg) { reinterpret_cast<ChromiumEnvStdio*>(arg)->BGThread(); } void RecordOpenFilesLimit(const std::string& type); }; } // namespace leveldb_env #endif