mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
111 lines
3.3 KiB
C++
111 lines
3.3 KiB
C++
// Copyright 2013 The Flutter 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 FLUTTER_SHELL_COMMON_THREAD_HOST_H_
|
|
#define FLUTTER_SHELL_COMMON_THREAD_HOST_H_
|
|
|
|
#include <memory>
|
|
#include <optional>
|
|
#include <string>
|
|
|
|
#include "flutter/fml/macros.h"
|
|
#include "flutter/fml/thread.h"
|
|
|
|
namespace flutter {
|
|
|
|
using ThreadConfig = fml::Thread::ThreadConfig;
|
|
using ThreadConfigSetter = fml::Thread::ThreadConfigSetter;
|
|
|
|
/// The collection of all the threads used by the engine.
|
|
struct ThreadHost {
|
|
enum Type {
|
|
Platform = 1 << 0,
|
|
UI = 1 << 1,
|
|
RASTER = 1 << 2,
|
|
IO = 1 << 3,
|
|
Profiler = 1 << 4,
|
|
};
|
|
|
|
/// The collection of all the thread configures, and we create custom thread
|
|
/// configure in engine to info the thread.
|
|
struct ThreadHostConfig {
|
|
explicit ThreadHostConfig(
|
|
const ThreadConfigSetter& setter = fml::Thread::SetCurrentThreadName)
|
|
: type_mask(0), config_setter(setter) {}
|
|
|
|
ThreadHostConfig(
|
|
const std::string& name_prefix,
|
|
uint64_t mask,
|
|
const ThreadConfigSetter& setter = fml::Thread::SetCurrentThreadName)
|
|
: type_mask(mask), name_prefix(name_prefix), config_setter(setter) {}
|
|
|
|
explicit ThreadHostConfig(
|
|
uint64_t mask,
|
|
const ThreadConfigSetter& setter = fml::Thread::SetCurrentThreadName)
|
|
: ThreadHostConfig("", mask, setter) {}
|
|
|
|
/// Check if need to create thread.
|
|
bool isThreadNeeded(Type type) const { return type_mask & type; }
|
|
|
|
/// Use the prefix and thread type to generator a thread name.
|
|
static std::string MakeThreadName(Type type, const std::string& prefix);
|
|
|
|
/// Specified the UI Thread Config, meanwhile set the mask.
|
|
void SetUIConfig(const ThreadConfig&);
|
|
|
|
/// Specified the Platform Thread Config, meanwhile set the mask.
|
|
void SetPlatformConfig(const ThreadConfig&);
|
|
|
|
/// Specified the IO Thread Config, meanwhile set the mask.
|
|
void SetRasterConfig(const ThreadConfig&);
|
|
|
|
/// Specified the IO Thread Config, meanwhile set the mask.
|
|
void SetIOConfig(const ThreadConfig&);
|
|
|
|
/// Specified the ProfilerThread Config, meanwhile set the mask.
|
|
void SetProfilerConfig(const ThreadConfig&);
|
|
|
|
uint64_t type_mask;
|
|
|
|
std::string name_prefix = "";
|
|
|
|
const ThreadConfigSetter config_setter;
|
|
|
|
std::optional<ThreadConfig> platform_config;
|
|
std::optional<ThreadConfig> ui_config;
|
|
std::optional<ThreadConfig> raster_config;
|
|
std::optional<ThreadConfig> io_config;
|
|
std::optional<ThreadConfig> profiler_config;
|
|
};
|
|
|
|
std::string name_prefix;
|
|
std::unique_ptr<fml::Thread> platform_thread;
|
|
std::unique_ptr<fml::Thread> ui_thread;
|
|
std::unique_ptr<fml::Thread> raster_thread;
|
|
std::unique_ptr<fml::Thread> io_thread;
|
|
std::unique_ptr<fml::Thread> profiler_thread;
|
|
|
|
ThreadHost();
|
|
|
|
ThreadHost(ThreadHost&&);
|
|
|
|
ThreadHost& operator=(ThreadHost&&) = default;
|
|
|
|
ThreadHost(const std::string& name_prefix, uint64_t mask);
|
|
|
|
explicit ThreadHost(const ThreadHostConfig& host_config);
|
|
|
|
~ThreadHost();
|
|
|
|
private:
|
|
std::unique_ptr<fml::Thread> CreateThread(
|
|
Type type,
|
|
std::optional<ThreadConfig> thread_config,
|
|
const ThreadHostConfig& host_config) const;
|
|
};
|
|
|
|
} // namespace flutter
|
|
|
|
#endif // FLUTTER_SHELL_COMMON_THREAD_HOST_H_
|