1 /** 2 * Copyright (c) 2023-2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "libpandabase/taskmanager/task_scheduler.h" 17 #include "runtime/mem/gc/workers/gc_workers_task_queue.h" 18 19 namespace ark::mem { 20 GCWorkersTaskQueue(GC * gc)21GCWorkersTaskQueue::GCWorkersTaskQueue(GC *gc) : GCWorkersTaskPool(gc) {} 22 23 GCWorkersTaskQueue::~GCWorkersTaskQueue() = default; 24 TryAddTask(GCWorkersTask && task)25bool GCWorkersTaskQueue::TryAddTask(GCWorkersTask &&task) 26 { 27 auto gcTaskRunner = [this, gcWorkerTask = std::move(task)]() mutable { // NOLINT(performance-move-const-arg) 28 this->RunGCWorkersTask(&gcWorkerTask); 29 }; 30 GetGC()->GetWorkersTaskQueue()->AddForegroundTask(gcTaskRunner); 31 return true; 32 } 33 RunInCurrentThread()34void GCWorkersTaskQueue::RunInCurrentThread() 35 { 36 size_t executed = 0; 37 do { 38 executed = GetGC()->GetWorkersTaskQueue()->ExecuteForegroundTask(); 39 } while (executed != 0); 40 } 41 42 } // namespace ark::mem 43