• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_STDIO_H_
6 #define THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_STDIO_H_
7 
8 #include "env_chromium.h"
9 
10 namespace leveldb_env {
11 
12 class ChromiumWritableFile : public leveldb::WritableFile {
13  public:
14   ChromiumWritableFile(const std::string& fname,
15                        FILE* f,
16                        const UMALogger* uma_logger,
17                        WriteTracker* tracker,
18                        bool make_backup);
19   virtual ~ChromiumWritableFile();
20   virtual leveldb::Status Append(const leveldb::Slice& data);
21   virtual leveldb::Status Close();
22   virtual leveldb::Status Flush();
23   virtual leveldb::Status Sync();
24 
25  private:
26   enum Type {
27     kManifest,
28     kTable,
29     kOther
30   };
31   leveldb::Status SyncParent();
32 
33   std::string filename_;
34   FILE* file_;
35   const UMALogger* uma_logger_;
36   WriteTracker* tracker_;
37   Type file_type_;
38   std::string parent_dir_;
39   bool make_backup_;
40 };
41 
42 class ChromiumEnvStdio : public ChromiumEnv {
43  public:
44   ChromiumEnvStdio();
45   virtual ~ChromiumEnvStdio();
46 
47   virtual leveldb::Status NewSequentialFile(const std::string& fname,
48                                             leveldb::SequentialFile** result);
49   virtual leveldb::Status NewRandomAccessFile(
50       const std::string& fname,
51       leveldb::RandomAccessFile** result);
52   virtual leveldb::Status NewWritableFile(const std::string& fname,
53                                           leveldb::WritableFile** result);
54   virtual leveldb::Status NewLogger(const std::string& fname,
55                                     leveldb::Logger** result);
56 
57  protected:
58   virtual base::File::Error GetDirectoryEntries(
59       const base::FilePath& dir_param,
60       std::vector<base::FilePath>* result) const;
61 
62  private:
63   // BGThread() is the body of the background thread
64   void BGThread();
BGThreadWrapper(void * arg)65   static void BGThreadWrapper(void* arg) {
66     reinterpret_cast<ChromiumEnvStdio*>(arg)->BGThread();
67   }
68   void RecordOpenFilesLimit(const std::string& type);
69 };
70 
71 }  // namespace leveldb_env
72 
73 #endif
74