#ifndef FLUTTER_COMMON_SETTINGS_H_
#define FLUTTER_COMMON_SETTINGS_H_
#include <fcntl.h>
#include <stdint.h>
#include <memory>
#include <string>
#include <vector>
#include "flutter/fml/closure.h"
#include "flutter/fml/mapping.h"
#include "flutter/fml/time/time_point.h"
#include "flutter/fml/unique_fd.h"
namespace flutter {
enum class AcePlatform : int32_t {
ACE_PLATFORM_INVALID = -1,
ACE_PLATFORM_ANDROID,
ACE_PLATFORM_IOS,
ACE_PLATFORM_OHOS,
};
class FrameTiming {
public:
enum Phase { kBuildStart, kBuildFinish, kRasterStart, kRasterFinish, kCount };
static constexpr Phase kPhases[kCount] = {kBuildStart, kBuildFinish,
kRasterStart, kRasterFinish};
fml::TimePoint Get(Phase phase) const { return data_[phase]; }
fml::TimePoint Set(Phase phase, fml::TimePoint value) {
return data_[phase] = value;
}
private:
fml::TimePoint data_[kCount];
};
using TaskObserverAdd =
std::function<void(intptr_t , fml::closure )>;
using TaskObserverRemove = std::function<void(intptr_t )>;
using UnhandledExceptionCallback =
std::function<bool(const std::string& ,
const std::string& )>;
using MappingCallback = std::function<std::unique_ptr<fml::Mapping>(void)>;
using MappingsCallback =
std::function<std::vector<std::unique_ptr<const fml::Mapping>>(void)>;
using FrameRasterizedCallback = std::function<void(const FrameTiming&)>;
struct Settings {
Settings();
Settings(const Settings& other);
~Settings();
bool use_test_fonts = false;
TaskObserverAdd task_observer_add;
TaskObserverRemove task_observer_remove;
std::function<void(int64_t)> idle_notification_callback;
UnhandledExceptionCallback unhandled_exception_callback;
bool enable_software_rendering = false;
bool skia_deterministic_rendering_on_cpu = false;
bool verbose_logging = false;
std::string log_tag = "flutter";
bool icu_initialization_required = true;
std::string icu_data_path;
MappingCallback icu_mapper;
fml::UniqueFD::element_type assets_dir =
fml::UniqueFD::traits_type::InvalidValue();
std::string assets_path;
FrameRasterizedCallback frame_rasterized_callback;
int32_t instanceId = 0;
bool platform_as_ui_thread = false;
bool use_current_event_runner = false;
bool use_system_render_thread = false;
bool use_io_thread = false;
AcePlatform platform = AcePlatform::ACE_PLATFORM_INVALID;
std::string ToString() const;
};
}
#endif