// 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.#define FML_USED_ON_EMBEDDER#include "flutter/fml/task_source.h"namespace fml {TaskSource::TaskSource(TaskQueueId task_queue_id): task_queue_id_(task_queue_id) {}TaskSource::~TaskSource() {ShutDown();}void TaskSource::ShutDown() {primary_task_queue_ = {};secondary_task_queue_ = {};}void TaskSource::RegisterTask(const DelayedTask& task) {switch (task.GetTaskSourceGrade()) {case TaskSourceGrade::kUserInteraction:primary_task_queue_.push(task);break;case TaskSourceGrade::kUnspecified:primary_task_queue_.push(task);break;case TaskSourceGrade::kDartEventLoop:secondary_task_queue_.push(task);break;}}void TaskSource::PopTask(TaskSourceGrade grade) {switch (grade) {case TaskSourceGrade::kUserInteraction:primary_task_queue_.pop();break;case TaskSourceGrade::kUnspecified:primary_task_queue_.pop();break;case TaskSourceGrade::kDartEventLoop:secondary_task_queue_.pop();break;}}size_t TaskSource::GetNumPendingTasks() const {size_t size = primary_task_queue_.size();if (secondary_pause_requests_ == 0) {size += secondary_task_queue_.size();}return size;}bool TaskSource::IsEmpty() const {return GetNumPendingTasks() == 0;}TaskSource::TopTask TaskSource::Top() const {FML_CHECK(!IsEmpty());if (secondary_pause_requests_ > 0 || secondary_task_queue_.empty()) {const auto& primary_top = primary_task_queue_.top();return {.task_queue_id = task_queue_id_,.task = primary_top,};} else if (primary_task_queue_.empty()) {const auto& secondary_top = secondary_task_queue_.top();return {.task_queue_id = task_queue_id_,.task = secondary_top,};} else {const auto& primary_top = primary_task_queue_.top();const auto& secondary_top = secondary_task_queue_.top();if (primary_top > secondary_top) {return {.task_queue_id = task_queue_id_,.task = secondary_top,};} else {return {.task_queue_id = task_queue_id_,.task = primary_top,};}}}void TaskSource::PauseSecondary() {secondary_pause_requests_++;}void TaskSource::ResumeSecondary() {secondary_pause_requests_--;FML_DCHECK(secondary_pause_requests_ >= 0);}} // namespace fml
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。