#ifndef CONTENT_BROWSER_SCHEDULER_BROWSER_IO_THREAD_DELEGATE_H_
#define CONTENT_BROWSER_SCHEDULER_BROWSER_IO_THREAD_DELEGATE_H_
#include "base/memory/ptr_util.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "base/task/sequence_manager/task_queue.h"
#include "base/threading/scoped_thread_priority.h"
#include "base/threading/thread.h"
#include "base/time/time.h"
#include "content/browser/scheduler/browser_task_queues.h"
#include "content/common/content_export.h"
namespace base {
class SingleThreadTaskRunner;
namespace sequence_manager {
class SequenceManager;
}
}
namespace content {
class CONTENT_EXPORT BrowserIOThreadDelegate : public base::Thread::Delegate {
public:
using Handle = BrowserTaskQueues::Handle;
BrowserIOThreadDelegate();
~BrowserIOThreadDelegate() override;
static std::unique_ptr<BrowserIOThreadDelegate> CreateForTesting(
base::sequence_manager::SequenceManager* sequence_manager) {
DCHECK(sequence_manager);
return base::WrapUnique(new BrowserIOThreadDelegate(sequence_manager));
}
scoped_refptr<base::SingleThreadTaskRunner> GetDefaultTaskRunner() override;
void BindToCurrentThread() override;
void AddTaskObserver(base::TaskObserver* observer) override;
bool allow_blocking_for_testing() const {
return allow_blocking_for_testing_;
}
void SetAllowBlockingForTesting() { allow_blocking_for_testing_ = true; }
base::TaskObserver* GetTaskObserver() {
return scenario_priority_boost_.get();
}
scoped_refptr<Handle> GetHandle() { return task_queues_->GetHandle(); }
private:
explicit BrowserIOThreadDelegate(
base::sequence_manager::SequenceManager* sequence_manager);
void Init();
bool allow_blocking_for_testing_ = false;
const std::unique_ptr<base::sequence_manager::SequenceManager>
owned_sequence_manager_;
const raw_ptr<base::sequence_manager::SequenceManager> sequence_manager_;
std::unique_ptr<BrowserTaskQueues> task_queues_;
scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_;
std::unique_ptr<base::TaskMonitoringScopedBoostPriority>
scenario_priority_boost_ = nullptr;
};
}
#endif