1 // Copyright (c) 2013 The LevelDB Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. See the AUTHORS file for names of contributors. 4 5 #ifndef THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_WIN_H_ 6 #define THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_WIN_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "third_party/leveldatabase/env_chromium.h" 12 13 namespace leveldb_env { 14 15 leveldb::Status MakeIOErrorWin(leveldb::Slice filename, 16 const std::string& message, 17 MethodID method, 18 DWORD err); 19 20 class ChromiumWritableFileWin : public leveldb::WritableFile { 21 public: 22 ChromiumWritableFileWin(const std::string& fname, 23 HANDLE f, 24 const UMALogger* uma_logger, 25 WriteTracker* tracker, 26 bool make_backup); 27 virtual ~ChromiumWritableFileWin(); 28 virtual leveldb::Status Append(const leveldb::Slice& data); 29 virtual leveldb::Status Close(); 30 virtual leveldb::Status Flush(); 31 virtual leveldb::Status Sync(); 32 33 private: 34 enum Type { 35 kManifest, 36 kTable, 37 kOther 38 }; 39 leveldb::Status SyncParent(); 40 41 std::string filename_; 42 HANDLE file_; 43 const UMALogger* uma_logger_; 44 WriteTracker* tracker_; 45 Type file_type_; 46 std::string parent_dir_; 47 bool make_backup_; 48 }; 49 50 class ChromiumEnvWin : public ChromiumEnv { 51 public: 52 ChromiumEnvWin(); 53 virtual ~ChromiumEnvWin(); 54 55 virtual leveldb::Status NewSequentialFile(const std::string& fname, 56 leveldb::SequentialFile** result); 57 virtual leveldb::Status NewRandomAccessFile( 58 const std::string& fname, 59 leveldb::RandomAccessFile** result); 60 virtual leveldb::Status NewWritableFile(const std::string& fname, 61 leveldb::WritableFile** result); 62 virtual leveldb::Status NewLogger(const std::string& fname, 63 leveldb::Logger** result); 64 65 protected: 66 virtual base::File::Error GetDirectoryEntries( 67 const base::FilePath& dir_param, 68 std::vector<base::FilePath>* result) const; 69 70 private: 71 // BGThread() is the body of the background thread 72 void BGThread(); 73 static void BGThreadWrapper(void* arg) { 74 reinterpret_cast<ChromiumEnvWin*>(arg)->BGThread(); 75 } 76 void RecordOpenFilesLimit(const std::string& type); 77 virtual void RecordOSError(MethodID method, DWORD err) const; 78 }; 79 80 } // namespace leveldb_env 81 82 #endif // THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_WIN_H_ 83