// 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