blob: 707ae112497f28306f49f9bba1b470ecc0eca9f8 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_SCHEDULER_CHILD_WEBTHREAD_BASE_H_
#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_SCHEDULER_CHILD_WEBTHREAD_BASE_H_
#include <map>
#include <memory>
#include "base/location.h"
#include "base/memory/scoped_refptr.h"
#include "base/message_loop/message_loop.h"
#include "base/threading/thread.h"
#include "third_party/blink/public/platform/web_common.h"
#include "third_party/blink/renderer/platform/scheduler/public/thread.h"
namespace base {
namespace sequence_manager {
class TaskTimeObserver;
}
} // namespace base
namespace blink {
namespace scheduler {
// TODO(scheduler-dev): Do not expose this class in Blink public API.
class BLINK_PLATFORM_EXPORT WebThreadBase : public Thread {
public:
~WebThreadBase() override;
// CreateWorkerThread() may be called from a non-main thread.
static std::unique_ptr<WebThreadBase> CreateWorkerThread(
const ThreadCreationParams& params);
static std::unique_ptr<WebThreadBase> CreateCompositorThread(
const ThreadCreationParams& params);
// Thread implementation.
bool IsCurrentThread() const override;
PlatformThreadId ThreadId() const override = 0;
void AddTaskObserver(TaskObserver* observer) override;
void RemoveTaskObserver(TaskObserver* observer) override;
void AddTaskTimeObserver(
base::sequence_manager::TaskTimeObserver* task_time_observer) override;
void RemoveTaskTimeObserver(
base::sequence_manager::TaskTimeObserver* task_time_observer) override;
virtual void Init() = 0;
protected:
class TaskObserverAdapter;
WebThreadBase();
virtual void AddTaskObserverInternal(
base::MessageLoop::TaskObserver* observer);
virtual void RemoveTaskObserverInternal(
base::MessageLoop::TaskObserver* observer);
virtual void AddTaskTimeObserverInternal(
base::sequence_manager::TaskTimeObserver*) {}
virtual void RemoveTaskTimeObserverInternal(
base::sequence_manager::TaskTimeObserver*) {}
static void RunWebThreadIdleTask(Thread::IdleTask idle_task,
base::TimeTicks deadline);
private:
typedef std::map<TaskObserver*, TaskObserverAdapter*> TaskObserverMap;
TaskObserverMap task_observer_map_;
};
} // namespace scheduler
} // namespace blink
#endif // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_SCHEDULER_CHILD_WEBTHREAD_BASE_H_