• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 #ifndef COMMON_COMPONENTS_HEAP_COLLECTOR_COLLECTOR_PROXY_H
17 #define COMMON_COMPONENTS_HEAP_COLLECTOR_COLLECTOR_PROXY_H
18 
19 #include "common_components/heap/ark_collector/ark_collector.h"
20 #include "common_components/heap/collector/collector.h"
21 #include "common_components/heap/collector/collector_resources.h"
22 
23 namespace common {
24 // CollectorProxy is a special kind of collector, it is derived from Base class Collector, thus behaves like a real
25 // collector. However, it actually manages a set of collectors implemented yet, and delegate garbage-collecting to
26 // one of these collectors.
27 // CollectorProxy should inherit collector interfaces, but no datas
28 class CollectorProxy : public Collector {
29 public:
CollectorProxy(Allocator & allocator,CollectorResources & resources)30     explicit CollectorProxy(Allocator& allocator, CollectorResources& resources)
31         : arkCollector_(allocator, resources)
32     {
33         collectorType_ = CollectorType::PROXY_COLLECTOR;
34     }
35 
36     ~CollectorProxy() override = default;
37 
38     void Init(const RuntimeParam& param) override;
39     void Fini() override;
40 
GetGCPhase()41     GCPhase GetGCPhase() const override { return currentCollector_->GetGCPhase(); }
42 
SetGCPhase(const GCPhase phase)43     void SetGCPhase(const GCPhase phase) override { currentCollector_->SetGCPhase(phase); }
44 
45     // dispatch garbage collection to the right collector
46     PUBLIC_API void RunGarbageCollection(uint64_t gcIndex, GCReason reason, GCType gcType) override;
47 
ShouldIgnoreRequest(GCRequest & request)48     bool ShouldIgnoreRequest(GCRequest& request) override { return currentCollector_->ShouldIgnoreRequest(request); }
49 
GetCurrentCollector()50     MarkingCollector& GetCurrentCollector() const { return *currentCollector_; }
51 
FindToVersion(BaseObject * obj)52     BaseObject* FindToVersion(BaseObject* obj) const override { return currentCollector_->FindToVersion(obj); }
53 
IsOldPointer(RefField<> & ref)54     bool IsOldPointer(RefField<>& ref) const override { return currentCollector_->IsOldPointer(ref); }
IsCurrentPointer(RefField<> & ref)55     bool IsCurrentPointer(RefField<>& ref) const override { return currentCollector_->IsCurrentPointer(ref); }
56 
IsFromObject(BaseObject * obj)57     bool IsFromObject(BaseObject* obj) const override { return currentCollector_->IsFromObject(obj); }
58 
59     // bool IsGhostFromObject(BaseObject* obj) const override { return currentCollector->IsGhostFromObject(obj); }
60 
IsUnmovableFromObject(BaseObject * obj)61     bool IsUnmovableFromObject(BaseObject* obj) const override { return currentCollector_->IsUnmovableFromObject(obj); }
62 
AddRawPointerObject(BaseObject * obj)63     void AddRawPointerObject(BaseObject* obj) override { return currentCollector_->AddRawPointerObject(obj); }
RemoveRawPointerObject(BaseObject * obj)64     void RemoveRawPointerObject(BaseObject* obj) override { return currentCollector_->RemoveRawPointerObject(obj); }
65 
ForwardObject(BaseObject * obj)66     BaseObject* ForwardObject(BaseObject* obj) override { return currentCollector_->ForwardObject(obj); }
67 
TryUpdateRefField(BaseObject * obj,RefField<> & field,BaseObject * & toVersion)68     bool TryUpdateRefField(BaseObject* obj, RefField<>& field, BaseObject*& toVersion) const override
69     {
70         return currentCollector_->TryUpdateRefField(obj, field, toVersion);
71     }
72 
TryForwardRefField(BaseObject * obj,RefField<> & field,BaseObject * & toVersion)73     bool TryForwardRefField(BaseObject* obj, RefField<>& field, BaseObject*& toVersion) const override
74     {
75         return currentCollector_->TryForwardRefField(obj, field, toVersion);
76     }
77 
TryUntagRefField(BaseObject * obj,RefField<> & field,BaseObject * & target)78     bool TryUntagRefField(BaseObject* obj, RefField<>& field, BaseObject*& target) const override
79     {
80         return currentCollector_->TryUntagRefField(obj, field, target);
81     }
82 
GetAndTryTagRefField(BaseObject * obj)83     RefField<> GetAndTryTagRefField(BaseObject* obj) const override
84     {
85         return currentCollector_->GetAndTryTagRefField(obj);
86     }
87 
88 private:
89     // supported collector set
90     ArkCollector* currentCollector_ = nullptr;
91     ArkCollector arkCollector_;
92 };
93 } // namespace common
94 
95 #endif // COMMON_COMPONENTS_HEAP_COLLECTOR_COLLECTOR_PROXY_H
96