• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 <benchmark/benchmark.h>
17 #include <string>
18 #include <vector>
19 #include <algorithm>
20 #include <fstream>
21 #include <iostream>
22 #include <thread>
23 #include <map>
24 #include <mutex>
25 #include "refbase.h"
26 #include "singleton.h"
27 #include "../log.h"
28 #include "../assert.h"
29 #include <future>
30 using namespace std;
31 
32 namespace OHOS {
33 namespace {
34 
35 class BenchmarkRefbaseTest : public benchmark::Fixture {
36     public:
BenchmarkRefbaseTest()37         BenchmarkRefbaseTest()
38         {
39             Iterations(iterations);
40             Repetitions(repetitions);
41             ReportAggregatesOnly();
42         }
43 
44         ~BenchmarkRefbaseTest() override = default;
45 
SetUp(const::benchmark::State & state)46         void SetUp(const ::benchmark::State &state) override
47         {
48         }
49 
TearDown(const::benchmark::State & state)50         void TearDown(const ::benchmark::State &state) override
51         {
52         }
53 
54     protected:
55     const int32_t repetitions = 3;
56     const int32_t iterations = 1000;
57 };
58 
59 static constexpr int FLAG_OF_CONS = 1;
60 static constexpr int FLAG_OF_DEST = 2;
61 static int g_sptrCount = 0;
62 static int g_refbaseflag = 0;
63 static int g_freeFlag = 0;
64 constexpr int EXPECTED_REF_COUNT_ZERO = 0;
65 constexpr int EXPECTED_REF_COUNT_ONE = 1;
66 constexpr int EXPECTED_REF_COUNT_TWO = 2;
67 constexpr int EXPECTED_REF_COUNT_THREE = 3;
68 constexpr int EXPECTED_REF_COUNT_FOUR = 4;
69 
70 class RefBaseTest : public RefBase {
71 public:
RefBaseTest()72     RefBaseTest()
73     {
74         g_refbaseflag = FLAG_OF_CONS;
75         isgetrefptr_ = false;
76     }
~RefBaseTest()77     ~RefBaseTest()
78     {
79         g_refbaseflag = FLAG_OF_DEST;
80     }
81 
OnLastStrongRef(const void * objectId)82     void OnLastStrongRef(const void *objectId) override
83     {
84         g_freeFlag = 1;
85     }
86 
SetRefPtr()87     void SetRefPtr()
88     {
89         isgetrefptr_ = true;
90     }
GetTestRefPtrFlag()91     bool GetTestRefPtrFlag()
92     {
93         return isgetrefptr_;
94     }
95 
96 private:
97     bool isgetrefptr_;
98 };
99 
100 class IRemoteObject : public virtual RefBase {
101 public:
IRemoteObject()102     IRemoteObject()
103     {
104         ExtendObjectLifetime();
105     }
106     virtual bool IsProxyObject() = 0;
~IRemoteObject()107     ~IRemoteObject() {}
108 };
109 
110 class RefBaseTestTracker : public RefBase {
111 public:
RefBaseTestTracker(int value)112     explicit RefBaseTestTracker(int value) : value_(value)
113     {
114         checkCount_++;
115     }
116     RefBaseTestTracker() = default;
~RefBaseTestTracker()117     ~RefBaseTestTracker()
118     {
119         BENCHMARK_LOGD("RefbaseTest ~RefBaseTestTracker() is called.");
120         checkCount_--;
121     }
122 
RefBaseTestTracker(const RefBaseTestTracker & testTracker)123     RefBaseTestTracker(const RefBaseTestTracker &testTracker)
124     {
125         BENCHMARK_LOGD("RefbaseTest RefBaseTestTracker(const RefBaseTestTracker &testTracker) is called.");
126         checkCount_++;
127         value_ = testTracker.value_;
128     }
129 
operator =(const RefBaseTestTracker & testTracker)130     RefBaseTestTracker &operator=(const RefBaseTestTracker &testTracker)
131     {
132         BENCHMARK_LOGD("RefbaseTest RefBaseTestTracker &operator=(const RefBaseTestTracker &testTracker) is called.");
133         checkCount_++;
134         value_ = testTracker.value_;
135         return *this;
136     }
137 
RefBaseTestTracker(RefBaseTestTracker && testTracker)138     RefBaseTestTracker(RefBaseTestTracker &&testTracker)
139     {
140         BENCHMARK_LOGD("RefbaseTest RefBaseTestTracker(RefBaseTestTracker &&testTracker) is called.");
141         checkCount_++;
142         value_ = testTracker.value_;
143     }
144 
operator =(RefBaseTestTracker && testTracker)145     RefBaseTestTracker &operator=(RefBaseTestTracker &&testTracker)
146     {
147         BENCHMARK_LOGD("RefbaseTest RefBaseTestTracker &operator=(RefBaseTestTracker &&testTracker) is called.");
148         checkCount_++;
149         value_ = testTracker.value_;
150         return *this;
151     }
152 
GetInstance()153     static RefBaseTestTracker *GetInstance()
154     {
155         BENCHMARK_LOGD("RefbaseTest static RefBaseTestTracker *GetInstance() is called.");
156         static RefBaseTestTracker instance;
157         return &instance;
158     }
159 
InitTracker()160     void InitTracker()
161     {
162         BENCHMARK_LOGD("RefbaseTest void InitTracker() is called.");
163         checkCount_ = 0;
164         freeCount_ = 0;
165         firstRefCount_ = 0;
166         lastRefCount_ = 0;
167     }
168 
TrackObject(IRemoteObject * object)169     void TrackObject(IRemoteObject *object)
170     {
171         BENCHMARK_LOGD("RefbaseTest void TrackObject(IRemoteObject *object) is called.");
172         std::lock_guard<std::mutex> lockGuard(objectMutex_);
173         trackObjects_.emplace_back(object);
174     }
175 
TrackNewObject(IRemoteObject * object)176     void TrackNewObject(IRemoteObject *object)
177     {
178         BENCHMARK_LOGD("RefbaseTest void TrackNewObject(IRemoteObject *object) is called.");
179         std::lock_guard<std::mutex> lockGuard(objectOnfirstMutex_);
180         RefBaseTestTracker::firstRefCount_++;
181     }
182 
UntrackObject(IRemoteObject * object)183     void UntrackObject(IRemoteObject *object)
184     {
185         BENCHMARK_LOGD("RefbaseTest void UntrackObject(IRemoteObject *object) is called.");
186         std::lock_guard<std::mutex> lockGuard(objectMutex_);
187         auto iter = find(trackObjects_.begin(), trackObjects_.end(), object);
188         if (iter != trackObjects_.end()) {
189             trackObjects_.erase(iter);
190         }
191     }
192 
TrackFreeObject(IRemoteObject * object)193     void TrackFreeObject(IRemoteObject *object)
194     {
195         BENCHMARK_LOGD("RefbaseTest void TrackFreeObject(IRemoteObject *object) is called.");
196         std::lock_guard<std::mutex> lockGuard(objectOnfreeMutex_);
197         RefBaseTestTracker::freeCount_++;
198     }
199 
PrintTrackResults()200     void PrintTrackResults()
201     {
202         BENCHMARK_LOGD("RefbaseTest void PrintTrackResults() is called.");
203         std::lock_guard<std::mutex> lockGuard(objectMutex_);
204         if (!trackObjects_.empty()) {
205             for (auto o : trackObjects_) {
206                 BENCHMARK_LOGD("object: %{public}p, strong: %{public}d, weak: %{public}d",
207                     static_cast<void*>(o), o->GetSptrRefCount(), o->GetWptrRefCount());
208             }
209         }
210         BENCHMARK_LOGD("firstRefCount_: %{public}d", RefBaseTestTracker::firstRefCount_);
211         BENCHMARK_LOGD("lastRefCount_: %{public}d", RefBaseTestTracker::lastRefCount_);
212         BENCHMARK_LOGD("freeCount_: %{public}d", RefBaseTestTracker::freeCount_);
213     }
214 
215 public:
216     int checkCount_ = 0;
217     int freeCount_ = 0;
218     int firstRefCount_ = 0;
219     int lastRefCount_ = 0;
220 
221 private:
222 
223     std::vector<IRemoteObject *> trackObjects_;
224     std::mutex objectMutex_;
225     std::mutex objectOnfirstMutex_;
226     std::mutex objectOnfreeMutex_;
227     int value_;
228 };
229 
230 class IPCObjectProxy : public IRemoteObject {
231 public:
IsProxyObject()232     bool IsProxyObject() override
233     {
234         return 0;
235     }
236     string descriptor_;
IPCObjectProxy(const string & descriptor)237     explicit IPCObjectProxy(const string &descriptor)
238     {
239         descriptor_ = descriptor;
240         RefBaseTestTracker *tracker = RefBaseTestTracker::GetInstance();
241         tracker->TrackObject(this);
242         tracker->TrackNewObject(this);
243     };
~IPCObjectProxy()244     ~IPCObjectProxy() {}
245     void RefPtrCallback() override;
246     void OnLastStrongRef(const void *objectId) override;
247     void OnFirstStrongRef(const void *objectId) override;
248     std::mutex mutexLast_;
249 };
250 
251 const int SLEEP_FOR_ONE_MILLISECOND = 1;
252 
253 class IPCProcessSkeleton : public virtual RefBase, public Singleton<IPCProcessSkeleton> {
254     friend class Singleton<IPCProcessSkeleton>;
255 
256 private:
257     IPCProcessSkeleton() = default;
258 
259 public:
260     ~IPCProcessSkeleton() override = default;
261 
262     std::mutex mutex_;
263     std::map<string, wptr<IRemoteObject>> objects1_;
264 
DumpMapObjects()265     void DumpMapObjects()
266     {
267         BENCHMARK_LOGD("RefbaseTest void DumpMapObjects() is called.");
268         if (!objects1_.empty()) {
269             for (auto &o : objects1_) {
270                 BENCHMARK_LOGD("strong: %{public}d, weak: %{public}d",
271                     o.second->GetSptrRefCount(), o.second->GetWptrRefCount());
272             }
273         }
274     }
QueryObjectInner(const string & descriptor)275     IRemoteObject *QueryObjectInner(const string &descriptor)
276     {
277         BENCHMARK_LOGD("RefbaseTest IRemoteObject *QueryObjectInner(const string &descriptor) is called.");
278         auto it = objects1_.find(descriptor);
279         if (it != objects1_.end()) {
280             it->second->AttemptAcquire(this);
281             std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_FOR_ONE_MILLISECOND));
282             return it->second.GetRefPtr();
283         }
284 
285         return nullptr;
286     }
287 
FindOrNewObject(int handle)288     IRemoteObject *FindOrNewObject(int handle)
289     {
290         BENCHMARK_LOGD("RefbaseTest IRemoteObject *FindOrNewObject(int handle) is called.");
291         std::lock_guard<std::mutex> lockGuard(mutex_);
292         IRemoteObject *remoteObject = QueryObjectInner(to_string(handle));
293         if (remoteObject != nullptr) {
294             std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_FOR_ONE_MILLISECOND));
295             return remoteObject;
296         }
297 
298         remoteObject = new IPCObjectProxy(to_string(handle));
299         remoteObject->AttemptAcquire(this);
300         objects1_.insert(std::pair<string, wptr<IRemoteObject>>(to_string(handle), remoteObject));
301         return remoteObject;
302     }
303 
DetachObject(IRemoteObject * object,string descriptor)304     bool DetachObject(IRemoteObject *object, string descriptor)
305     {
306         BENCHMARK_LOGD("RefbaseTest bool DetachObject(IRemoteObject *object, string descriptor) is called.");
307         std::lock_guard<std::mutex> lockGuard(mutex_);
308         if (object->GetSptrRefCount()) {
309             return false;
310         }
311         return (objects1_.erase(descriptor) > 0);
312     }
313 };
314 
315 const int SLEEP_FOR_TEN_NANOSECONDS = 10;
316 
OnLastStrongRef(const void * objectId)317 void IPCObjectProxy::OnLastStrongRef(const void *objectId)
318 {
319     BENCHMARK_LOGD("RefbaseTest void IPCObjectProxy::OnLastStrongRef(const void *objectId) is called.");
320     std::lock_guard<std::mutex> lock(mutexLast_);
321     (void)IPCProcessSkeleton::GetInstance().DetachObject(this, descriptor_);
322     RefBaseTestTracker *tracker = RefBaseTestTracker::GetInstance();
323     tracker->lastRefCount_++;
324     std::this_thread::sleep_for(std::chrono::nanoseconds(SLEEP_FOR_TEN_NANOSECONDS));
325 }
326 
OnFirstStrongRef(const void * objectId)327 void IPCObjectProxy::OnFirstStrongRef(const void *objectId)
328 {
329     BENCHMARK_LOGD("RefbaseTest void IPCObjectProxy::OnFirstStrongRef(const void *objectId) is called.");
330     std::this_thread::sleep_for(std::chrono::nanoseconds(SLEEP_FOR_TEN_NANOSECONDS));
331 }
332 
RefPtrCallback()333 void IPCObjectProxy::RefPtrCallback()
334 {
335     BENCHMARK_LOGD("RefbaseTest void IPCObjectProxy::RefPtrCallback() is called.");
336     RefBaseTestTracker *tracker = RefBaseTestTracker::GetInstance();
337     tracker->UntrackObject(this);
338     tracker->TrackFreeObject(this);
339     RefBase::RefPtrCallback();
340 }
341 
342 constexpr int CYCLE_NUM1 = 2;
343 constexpr int CYCLE_NUM2 = 2;
344 
RegisterEventThread()345 int RegisterEventThread()
346 {
347     BENCHMARK_LOGD("RefbaseTest int RegisterEventThread() is called.");
348     auto &ipc = IPCProcessSkeleton::GetInstance();
349     int handle = 10;
350     for (int i = 0; i < CYCLE_NUM2; i++) {
351         sptr<IRemoteObject> remote = ipc.FindOrNewObject(handle);
352         if (remote) {
353             remote->IsProxyObject();
354         }
355     }
356     return 0;
357 }
358 
359 class SptrTest : public RefBase {
360 public:
SptrTest()361     SptrTest()
362     {
363         g_sptrCount++;
364     }
~SptrTest()365     ~SptrTest()
366     {
367         g_sptrCount--;
368     }
CreateSptr()369     void CreateSptr()
370     {
371         test1 = new SptrTest();
372     }
373 
374 private:
375     sptr<SptrTest> test1;
376 };
377 
378 class SptrTest1;
379 class SptrTest2;
380 class SptrTest2 : public RefBase {
381 public:
SptrTest2()382     SptrTest2()
383     {
384         BENCHMARK_LOGD("RefbaseTest SptrTest2() is called.");
385         g_sptrCount++;
386     }
~SptrTest2()387     ~SptrTest2()
388     {
389         BENCHMARK_LOGD("RefbaseTest ~SptrTest2() is called.");
390         g_sptrCount--;
391     }
392 
393 private:
394     sptr<SptrTest1> test;
395 };
396 
397 class SptrTest1 : public RefBase {
398 public:
SptrTest1()399     SptrTest1()
400     {
401         BENCHMARK_LOGD("RefbaseTest SptrTest1() is called.");
402         g_sptrCount++;
403     }
~SptrTest1()404     ~SptrTest1()
405     {
406         BENCHMARK_LOGD("RefbaseTest ~SptrTest1() is called.");
407         g_sptrCount--;
408     }
409 
410 private:
411     sptr<SptrTest2> test;
412 };
413 
414 class WptrTest : public RefBase {
415 public:
WptrTest()416     WptrTest()
417     {
418         g_sptrCount++;
419     }
~WptrTest()420     ~WptrTest()
421     {
422         g_sptrCount--;
423     }
424 };
425 
426 class WptrTest2 : public RefBase {
427 public:
WptrTest2()428     WptrTest2()
429     {
430         g_sptrCount++;
431         flag_ = 0;
432     }
~WptrTest2()433     ~WptrTest2()
434     {
435         g_sptrCount--;
436     }
437 
438 private:
439     int flag_;
440 };
441 
442 class RefBaseMemTest : public RefBase {
443 public:
RefBaseMemTest(int value)444     explicit RefBaseMemTest(int value): value_(value)
445     {
446         BENCHMARK_LOGD("RefbaseTest explicit RefBaseMemTest(int value): value_(value) is called.");
447         checkCount_++;
448     }
449 
~RefBaseMemTest()450     ~RefBaseMemTest()
451     {
452         BENCHMARK_LOGD("RefbaseTest ~RefBaseMemTest() is called.");
453         checkCount_--;
454     }
455 
RefBaseMemTest(const RefBaseMemTest & testRefbaseMem)456     RefBaseMemTest(const RefBaseMemTest &testRefbaseMem)
457     {
458         BENCHMARK_LOGD("RefbaseTest RefBaseMemTest(const RefBaseMemTest &testRefbaseMem) is called.");
459         checkCount_++;
460         value_ = testRefbaseMem.value_;
461     }
462 
operator =(const RefBaseMemTest & testRefbaseMem)463     RefBaseMemTest &operator=(const RefBaseMemTest &testRefbaseMem)
464     {
465         BENCHMARK_LOGD("RefbaseTest RefBaseMemTest &operator=(const RefBaseMemTest &testRefbaseMem) is called.");
466         checkCount_++;
467         value_ = testRefbaseMem.value_;
468         return *this;
469     }
470 
RefBaseMemTest(RefBaseMemTest && testRefbaseMem)471     RefBaseMemTest(RefBaseMemTest &&testRefbaseMem)
472     {
473         BENCHMARK_LOGD("RefbaseTest RefBaseMemTest(RefBaseMemTest &&testRefbaseMem) is called.");
474         checkCount_++;
475         value_ = testRefbaseMem.value_;
476     }
477 
operator =(RefBaseMemTest && testRefbaseMem)478     RefBaseMemTest &operator=(RefBaseMemTest &&testRefbaseMem)
479     {
480         BENCHMARK_LOGD("RefbaseTest RefBaseMemTest &operator=(RefBaseMemTest &&testRefbaseMem) is called.");
481         checkCount_++;
482         value_ = testRefbaseMem.value_;
483         return *this;
484     }
485 
486 public:
487     static inline int checkCount_ = 0;
488 
489 private:
490     int value_;
491 };
492 
493 // This is a class which can be tracked when implemented.
494 class TestDebug : public RefBase {
495 public:
TestDebug()496     TestDebug()
497     {
498         EnableTracker();
499     }
500 };
501 
502 /*
503  * @tc.name: testRefbaseOperateThreads001
504  * @tc.desc: Refbase for threads
505  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbaseOperateThreads001)506 BENCHMARK_F(BenchmarkRefbaseTest, testRefbaseOperateThreads001)(benchmark::State &state)
507 {
508     BENCHMARK_LOGD("RefbaseTest testRefbaseOperateThreads001 start.");
509     constexpr int cycleNum = 1;
510     while (state.KeepRunning()) {
511         RefBaseTestTracker *tracker = RefBaseTestTracker::GetInstance();
512         tracker->InitTracker();
513         for (int n = 0; n < cycleNum; n++) {
514             std::vector<std::future<int>> threads;
515             for (int i = 0; i < CYCLE_NUM1; i++) {
516                 threads.emplace_back(std::async(RegisterEventThread));
517             }
518 
519             for (auto &f : threads) {
520                 f.get();
521             }
522         }
523         auto &ipc = IPCProcessSkeleton::GetInstance();
524         ipc.DumpMapObjects();
525         AssertEqual(tracker->firstRefCount_, tracker->freeCount_,
526             "tracker->firstRefCount_ and tracker->freeCount_ are not equal", state);
527     }
528     BENCHMARK_LOGD("RefbaseTest testRefbaseOperateThreads001 end.");
529 }
530 
531 /*
532  * @tc.name: testRefbaseOperate001
533  * @tc.desc: test AttemptAcquire, IncWeakRef, DecWeakRef, IncStrongRef, DecStrongRef of Refbase
534  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbaseOperate001)535 BENCHMARK_F(BenchmarkRefbaseTest, testRefbaseOperate001)(benchmark::State& state)
536 {
537     BENCHMARK_LOGD("RefbaseTest testRefbaseOperate001 start.");
538     while (state.KeepRunning()) {
539         RefBaseTestTracker *tracker = RefBaseTestTracker::GetInstance();
540         tracker->InitTracker();
541 
542         auto remoteObject = new IPCObjectProxy("ss");
543         remoteObject->AttemptAcquire(this);
544         remoteObject->IncWeakRef(this);
545         remoteObject->IncStrongRef(this);
546         remoteObject->DecStrongRef(this);
547         remoteObject->AttemptAcquire(this);
548 
549         remoteObject->IncStrongRef(this);
550         remoteObject->DecStrongRef(this);
551 
552         remoteObject->DecWeakRef(this);
553         AssertEqual(tracker->firstRefCount_, tracker->freeCount_,
554             "tracker->firstRefCount_ and tracker->freeCount_ are not equal", state);
555     }
556     BENCHMARK_LOGD("RefbaseTest testRefbaseOperate001 end.");
557 }
558 
559 constexpr int REF_MEM_TEST_OBJ_1_PARAM = 1;
560 constexpr int REF_MEM_TEST_OBJ_2_PARAM = 2;
561 
562 /*
563  * @tc.name: testRefbaseOperateLeftValue001
564  * @tc.desc: Refbase
565  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbaseOperateLeftValue001)566 BENCHMARK_F(BenchmarkRefbaseTest, testRefbaseOperateLeftValue001)(benchmark::State& state)
567 {
568     BENCHMARK_LOGD("RefbaseTest testRefbaseOperateLeftValue001 start.");
569     while (state.KeepRunning()) {
570         RefBaseMemTest::checkCount_ = 0;
571         {
572             vector<RefBaseMemTest> refMemTestArray;
573             sptr<RefBaseMemTest>refMemTestObj1 = new RefBaseMemTest(REF_MEM_TEST_OBJ_1_PARAM);
574             sptr<RefBaseMemTest>refMemTestObj2 = new RefBaseMemTest(REF_MEM_TEST_OBJ_2_PARAM);
575             refMemTestArray.push_back(*refMemTestObj1);
576             refMemTestArray.push_back(*refMemTestObj2);
577         }
578         AssertEqual(RefBaseMemTest::checkCount_, 0, "RefBaseMemTest::checkCount_ did not equal 0", state);
579 
580         {
581             vector<RefBaseMemTest> refMemTestArray;
582             RefBaseMemTest refMemTestObj1(REF_MEM_TEST_OBJ_1_PARAM);
583             RefBaseMemTest refMemTestObj2(REF_MEM_TEST_OBJ_2_PARAM);
584             refMemTestArray.push_back(refMemTestObj1);
585             refMemTestArray.push_back(refMemTestObj2);
586         }
587         AssertEqual(RefBaseMemTest::checkCount_, 0, "RefBaseMemTest::checkCount_ did not equal 0", state);
588     }
589     BENCHMARK_LOGD("RefbaseTest testRefbaseOperateLeftValue001 end.");
590 }
591 
592 /*
593  * @tc.name: testRefbaseOperateRightValue001
594  * @tc.desc: Refbase
595  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbaseOperateRightValue001)596 BENCHMARK_F(BenchmarkRefbaseTest, testRefbaseOperateRightValue001)(benchmark::State& state)
597 {
598     BENCHMARK_LOGD("RefbaseTest testRefbaseOperateRightValue001 start.");
599     while (state.KeepRunning()) {
600         RefBaseMemTest::checkCount_ = 0;
601         {
602             vector<RefBaseMemTest> refMemTestArray;
603             sptr<RefBaseMemTest>refMemTestObj1 = new RefBaseMemTest(REF_MEM_TEST_OBJ_1_PARAM);
604             sptr<RefBaseMemTest>refMemTestObj2 = new RefBaseMemTest(REF_MEM_TEST_OBJ_2_PARAM);
605             refMemTestArray.emplace_back(*refMemTestObj1);
606             refMemTestArray.emplace_back(*refMemTestObj2);
607         }
608         AssertEqual(RefBaseMemTest::checkCount_, 0, "RefBaseMemTest::checkCount_ did not equal 0", state);
609 
610         {
611             vector<RefBaseMemTest> refMemTestArray;
612             RefBaseMemTest refMemTestObj1(REF_MEM_TEST_OBJ_1_PARAM);
613             RefBaseMemTest refMemTestObj2(REF_MEM_TEST_OBJ_2_PARAM);
614             refMemTestArray.emplace_back(refMemTestObj1);
615             refMemTestArray.emplace_back(refMemTestObj2);
616         }
617         AssertEqual(RefBaseMemTest::checkCount_, 0, "RefBaseMemTest::checkCount_ did not equal 0", state);
618     }
619     BENCHMARK_LOGD("RefbaseTest testRefbaseOperateRightValue001 end.");
620 }
621 
622 /*
623  * @tc.name: testRefbaseAcquire001
624  * @tc.desc: Refbase
625  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbaseAcquire001)626 BENCHMARK_F(BenchmarkRefbaseTest, testRefbaseAcquire001)(benchmark::State& state)
627 {
628     BENCHMARK_LOGD("RefbaseTest testRefbaseAcquire001 start.");
629     while (state.KeepRunning()) {
630         RefBaseTest* testobject = new RefBaseTest();
631         testobject->AttemptAcquire(this);
632 
633         g_freeFlag = 0;
634         AssertEqual(testobject->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
635             "testobject->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
636 
637         {
638             AssertTrue(testobject->IsAttemptAcquireSet(),
639                 "testobject->IsAttemptAcquireSet() did not equal true", state);
640             sptr<RefBaseTest> sptrRef = testobject;
641             AssertEqual(sptrRef->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
642                 "sptrRef->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
643             AssertFalse(testobject->IsAttemptAcquireSet(),
644                 "testobject->IsAttemptAcquireSet() did not equal false", state);
645         }
646 
647         AssertEqual(g_freeFlag, EXPECTED_REF_COUNT_ONE, "g_freeFlag did not equal EXPECTED_REF_COUNT_ONE", state);
648     }
649     BENCHMARK_LOGD("RefbaseTest testRefbaseAcquire001 end.");
650 }
651 
652 /*
653  * @tc.name: testSptrefbase001
654  * @tc.desc: Refbase
655  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase001)656 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase001)(benchmark::State& state)
657 {
658     BENCHMARK_LOGD("RefbaseTest testSptrefbase001 start.");
659     while (state.KeepRunning()) {
660         sptr<RefBaseTest> testobject = new RefBaseTest();
661         testobject->ExtendObjectLifetime();
662         AssertTrue(testobject->IsExtendLifeTimeSet(), "testobject->IsExtendLifeTimeSet() did not equal true", state);
663         AssertEqual(g_refbaseflag, EXPECTED_REF_COUNT_ONE,
664             "g_refbaseflag did not equal EXPECTED_REF_COUNT_ONE", state);
665         wptr<RefBaseTest> weakObject(testobject);
666         int count = testobject->GetWptrRefCount();
667         AssertEqual(count, EXPECTED_REF_COUNT_TWO, "count did not equal EXPECTED_REF_COUNT_TWO", state);
668         testobject = nullptr;
669 
670         sptr<RefBaseTest> strongObject = weakObject.promote();
671         AssertEqual(strongObject->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
672             "GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
673     }
674     BENCHMARK_LOGD("RefbaseTest testSptrefbase001 end.");
675 }
676 
677 /*
678  * @tc.name: testSptrefbaseRealease001
679  * @tc.desc: Refbase
680  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbaseRealease001)681 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbaseRealease001)(benchmark::State& state)
682 {
683     BENCHMARK_LOGD("RefbaseTest testSptrefbaseRealease001 start.");
684     constexpr int expectedFlag = 1;
685     while (state.KeepRunning()) {
686         sptr<RefBaseTest> testObject = new RefBaseTest();
687         AssertEqual(g_refbaseflag, expectedFlag, "g_refbaseflag did not equal expectedFlag", state);
688         wptr<RefBaseTest> weakObject(testObject);
689         testObject = nullptr;
690         AssertEqual(g_refbaseflag, FLAG_OF_DEST, "g_refbaseflag did not equal FLAG_OF_DEST", state);
691     }
692     BENCHMARK_LOGD("RefbaseTest testSptrefbaseRealease001 end.");
693 }
694 
695 /*
696  * @tc.name: testSptrefbaseRealease002
697  * @tc.desc: Refbase
698  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbaseRealease002)699 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbaseRealease002)(benchmark::State& state)
700 {
701     BENCHMARK_LOGD("RefbaseTest testSptrefbaseRealease002 start.");
702     constexpr int expectedFlag = 1;
703     while (state.KeepRunning()) {
704         wptr<RefBaseTest> testObject = new RefBaseTest();
705         AssertEqual(g_refbaseflag, expectedFlag, "g_refbaseflag did not equal expectedFlag", state);
706         testObject = nullptr;
707         AssertEqual(g_refbaseflag, FLAG_OF_DEST, "g_refbaseflag did not equal FLAG_OF_DEST", state);
708     }
709     BENCHMARK_LOGD("RefbaseTest testSptrefbaseRealease002 end.");
710 }
711 
712 /*
713  * @tc.name: testSptrefbase002
714  * @tc.desc: Refbase
715  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase002)716 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase002)(benchmark::State& state)
717 {
718     BENCHMARK_LOGD("RefbaseTest testSptrefbase002 start.");
719     constexpr int expectedRefbaseFlag1 = 1;
720     constexpr int expectedRefbaseFlag2 = 2;
721     while (state.KeepRunning()) {
722         {
723             sptr<RefBaseTest> testObject(new RefBaseTest());
724             AssertEqual(g_refbaseflag, expectedRefbaseFlag1, "g_refbaseflag did not equal expectedRefbaseFlag1", state);
725         }
726         AssertEqual(g_refbaseflag, expectedRefbaseFlag2,
727             "g_refbaseflag did not equal expectedRefbaseFlag2", state);
728     }
729     BENCHMARK_LOGD("RefbaseTest testSptrefbase002 end.");
730 }
731 
732 /*
733  * @tc.name: testSptrefbase003
734  * @tc.desc: Refbase
735  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase003)736 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase003)(benchmark::State& state)
737 {
738     BENCHMARK_LOGD("RefbaseTest testSptrefbase003 start.");
739     while (state.KeepRunning()) {
740         sptr<RefBaseTest> testObject1(new RefBaseTest());
741         sptr<RefBaseTest> testObject2 = testObject1.GetRefPtr();
742         testObject2->SetRefPtr();
743         AssertTrue(testObject1->GetTestRefPtrFlag(), "testObject1->GetTestRefPtrFlag() did not equal true", state);
744 
745         sptr<RefBaseTest> testObject3(testObject1);
746         AssertTrue(testObject3->GetTestRefPtrFlag(), "testObject3->GetTestRefPtrFlag() did not equal true", state);
747 
748         sptr<RefBaseTest> testObject4 = testObject1;
749         AssertTrue(testObject3->GetTestRefPtrFlag(), "testObject3->GetTestRefPtrFlag() did not equal true", state);
750 
751         bool ret = (testObject3 == testObject4);
752         AssertTrue(ret, "ret did not equal true", state);
753 
754         int refcount = testObject1->GetSptrRefCount();
755         AssertEqual(refcount, EXPECTED_REF_COUNT_FOUR, "refcount did not equal EXPECTED_REF_COUNT_FOUR", state);
756 
757         sptr<RefBaseTest> testObject5(new RefBaseTest());
758         ret = (testObject5 != testObject1);
759         AssertTrue(ret, "ret did not equal true", state);
760     }
761     BENCHMARK_LOGD("RefbaseTest testSptrefbase003 end.");
762 }
763 
764 /*
765  * @tc.name: testSptrefbase004
766  * @tc.desc: Refbase
767  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase004)768 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase004)(benchmark::State& state)
769 {
770     BENCHMARK_LOGD("RefbaseTest testSptrefbase004 start.");
771     constexpr int expectedRefbaseFlag = 2;
772     while (state.KeepRunning()) {
773         sptr<RefBaseTest> testObject1(new RefBaseTest());
774         testObject1->SetRefPtr();
775         RefBaseTest testObject2 = *testObject1;
776         AssertTrue(testObject2.GetTestRefPtrFlag(), "testObject2.GetTestRefPtrFlag() did not equal true", state);
777 
778         auto testObject3 = testObject1;
779         testObject1 = nullptr;
780         testObject3 = nullptr;
781         AssertEqual(g_refbaseflag, expectedRefbaseFlag, "g_refbaseflag did not equal expectedRefbaseFlag", state);
782     }
783     BENCHMARK_LOGD("RefbaseTest testSptrefbase004 end.");
784 }
785 
786 /*
787  * @tc.name: testSptrefbase005
788  * @tc.desc: Refbase
789  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase005)790 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase005)(benchmark::State& state)
791 {
792     BENCHMARK_LOGD("RefbaseTest testSptrefbase005 start.");
793     while (state.KeepRunning()) {
794         sptr<RefBaseTest> testObject1(new RefBaseTest());
795         wptr<RefBaseTest> testObject2 = testObject1;
796         AssertEqual(testObject1->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
797             "testObject1->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
798         AssertEqual(testObject1->GetWptrRefCount(), EXPECTED_REF_COUNT_TWO,
799             "testObject1->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
800     }
801     BENCHMARK_LOGD("RefbaseTest testSptrefbase005 end.");
802 }
803 
804 /*
805  * @tc.name: testSptrefbase006
806  * @tc.desc: Refbase
807  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase006)808 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase006)(benchmark::State& state)
809 {
810     BENCHMARK_LOGD("RefbaseTest testSptrefbase006 start.");
811     while (state.KeepRunning()) {
812         sptr<RefBaseTest> testObject1;
813         AssertEqual(testObject1.GetRefPtr(), nullptr, "testObject1.GetRefPtr() did not equal nullptr", state);
814         testObject1 = new RefBaseTest();
815         sptr<RefBaseTest> testObject2(testObject1);
816         AssertEqual(testObject1->GetSptrRefCount(), EXPECTED_REF_COUNT_TWO,
817             "testObject1->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
818     }
819     BENCHMARK_LOGD("RefbaseTest testSptrefbase006 end.");
820 }
821 
822 /*
823  * @tc.name: testSptrefbase007
824  * @tc.desc: Refbase
825  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase007)826 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase007)(benchmark::State& state)
827 {
828     BENCHMARK_LOGD("RefbaseTest testSptrefbase007 start.");
829     while (state.KeepRunning()) {
830         const sptr<RefBaseTest> &testObject1 = new RefBaseTest();
831         sptr<RefBaseTest> testObject2(testObject1);
832         AssertEqual(testObject1->GetSptrRefCount(), EXPECTED_REF_COUNT_TWO,
833             "testObject1->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
834     }
835     BENCHMARK_LOGD("RefbaseTest testSptrefbase007 end.");
836 }
837 
838 /*
839  * @tc.name: testSptrefbase008
840  * @tc.desc: Refbase
841  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase008)842 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase008)(benchmark::State& state)
843 {
844     BENCHMARK_LOGD("RefbaseTest testSptrefbase008 start.");
845     while (state.KeepRunning()) {
846         sptr<RefBaseTest> testObject1;
847         sptr<RefBaseTest> testObject2(testObject1);
848         AssertEqual(testObject2, nullptr, "testObject2 did not equal nullptr", state);
849     }
850     BENCHMARK_LOGD("RefbaseTest testSptrefbase008 end.");
851 }
852 
853 /*
854  * @tc.name: testSptrefbase009
855  * @tc.desc: Refbase
856  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase009)857 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase009)(benchmark::State& state)
858 {
859     BENCHMARK_LOGD("RefbaseTest testSptrefbase009 start.");
860     while (state.KeepRunning()) {
861         sptr<RefBaseTest> testObject0 = new RefBaseTest();
862         sptr<RefBaseTest> testObject1 = move(testObject0);
863         sptr<RefBaseTest> testObject2(testObject1);
864         AssertEqual(testObject0.GetRefPtr(), nullptr, "testObject0.GetRefPtr() did not equal nullptr", state);
865         AssertEqual(testObject2.GetRefPtr(), testObject1.GetRefPtr(),
866             "testObject2.GetRefPtr() did not equal testObject1.GetRefPtr()", state);
867     }
868     BENCHMARK_LOGD("RefbaseTest testSptrefbase009 end.");
869 }
870 
871 /*
872  * @tc.name: testSptrefbase010
873  * @tc.desc: Refbase
874  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase010)875 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase010)(benchmark::State& state)
876 {
877     BENCHMARK_LOGD("RefbaseTest testSptrefbase010 start.");
878     while (state.KeepRunning()) {
879         sptr<RefBaseTest> testObject1 = new RefBaseTest();
880         sptr<RefBaseTest> testObject3(new RefBaseTest());
881         sptr<RefBaseTest> &testObject2 = testObject3;
882         testObject2 = testObject1;
883         AssertEqual(testObject2.GetRefPtr(), testObject1.GetRefPtr(),
884             "testObject2.GetRefPtr() did not equal testObject1.GetRefPtr()", state);
885 
886         const sptr<RefBaseTest> &testObject4 = new RefBaseTest();
887         AssertEqual(testObject1->GetSptrRefCount(), EXPECTED_REF_COUNT_TWO,
888             "testObject1->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
889         testObject2 = testObject4;
890         AssertEqual(testObject2.GetRefPtr(), testObject4.GetRefPtr(),
891             "testObject2.GetRefPtr() did not equal testObject4.GetRefPtr()", state);
892         AssertEqual(testObject4->GetSptrRefCount(), EXPECTED_REF_COUNT_TWO,
893             "testObject4->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
894         AssertEqual(testObject1->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
895             "testObject1->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
896     }
897     BENCHMARK_LOGD("RefbaseTest testSptrefbase010 end.");
898 }
899 
900 /*
901  * @tc.name: testSptrefbase011
902  * @tc.desc: test MakeSptr of sptr
903  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase011)904 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase011)(benchmark::State& state)
905 {
906     BENCHMARK_LOGD("RefbaseTest testSptrefbase011 start.");
907     while (state.KeepRunning()) {
908         RefBase ref;
909         sptr<RefBase> baseObject = sptr<RefBase>::MakeSptr(ref);
910         AssertEqual(baseObject.GetRefPtr()->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
911             "baseObject.GetRefPtr()->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
912     }
913     BENCHMARK_LOGD("RefbaseTest testSptrefbase011 end.");
914 }
915 
916 /*
917  * @tc.name: testSptrefbase012
918  * @tc.desc: test move assignment operator of sptr
919  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase012)920 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase012)(benchmark::State& state)
921 {
922     BENCHMARK_LOGD("RefbaseTest testSptrefbase012 start.");
923     while (state.KeepRunning()) {
924         sptr<RefBase> baseObject1(new RefBase());
925         sptr<RefBase> baseObject2;
926         baseObject2 = std::move(baseObject1);
927         AssertEqual(baseObject1.GetRefPtr(), nullptr, "baseObject1.GetRefPtr() did not equal nullptr", state);
928         AssertEqual(baseObject2.GetRefPtr()->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
929             "baseObject2.GetRefPtr()->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
930         sptr<RefBase> baseObject3(new RefBase());
931         baseObject3 = std::move(baseObject2);
932         AssertEqual(baseObject2.GetRefPtr(), nullptr, "baseObject2.GetRefPtr() did not equal nullptr", state);
933         AssertEqual(baseObject3.GetRefPtr()->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
934             "baseObject3.GetRefPtr()->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
935     }
936     BENCHMARK_LOGD("RefbaseTest testSptrefbase012 end.");
937 }
938 
939 /*
940  * @tc.name: testSptrefbase013
941  * @tc.desc: test copy Constructor for sptr with the managed class type (O)
942  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase013)943 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase013)(benchmark::State& state)
944 {
945     BENCHMARK_LOGD("RefbaseTest testSptrefbase013 start.");
946     while (state.KeepRunning()) {
947         sptr<RefBaseTest> baseObject1(new RefBaseTest());
948         sptr<RefBase> baseObject2(baseObject1);
949         AssertEqual(baseObject1.GetRefPtr(), baseObject2.GetRefPtr(),
950             "baseObject1.GetRefPtr() did not equal baseObject2.GetRefPtr()", state);
951         AssertEqual(baseObject2.GetRefPtr()->GetSptrRefCount(), EXPECTED_REF_COUNT_TWO,
952             "baseObject2.GetRefPtr()->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
953     }
954     BENCHMARK_LOGD("RefbaseTest testSptrefbase013 end.");
955 }
956 
957 /*
958  * @tc.name: testSptrefbase014
959  * @tc.desc: test clear of sptr
960  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase014)961 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase014)(benchmark::State& state)
962 {
963     BENCHMARK_LOGD("RefbaseTest testSptrefbase014 start.");
964     while (state.KeepRunning()) {
965         sptr<RefBaseTest> baseObject(new RefBaseTest());
966         baseObject.clear();
967         AssertEqual(baseObject.GetRefPtr(), nullptr, "baseObject.GetRefPtr() did not equal nullptr", state);
968     }
969     BENCHMARK_LOGD("RefbaseTest testSptrefbase014 end.");
970 }
971 
972 /*
973  * @tc.name: testSptrefbase015
974  * @tc.desc: test boolean conversion operator of sptr
975  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase015)976 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase015)(benchmark::State& state)
977 {
978     BENCHMARK_LOGD("RefbaseTest testSptrefbase015 start.");
979     while (state.KeepRunning()) {
980         sptr<RefBaseTest> baseObject1;
981         AssertFalse(baseObject1, "baseObject1 did not equal false", state);
982         sptr<RefBaseTest> baseObject2(new RefBaseTest());
983         AssertTrue(baseObject2, "baseObject2 did not equal true", state);
984     }
985     BENCHMARK_LOGD("RefbaseTest testSptrefbase015 end.");
986 }
987 
988 /*
989  * @tc.name: testSptrefbase016
990  * @tc.desc: test Copy assignment operator for sptr with
991  * a different managed class type (O)
992  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase016)993 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase016)(benchmark::State& state)
994 {
995     BENCHMARK_LOGD("RefbaseTest testSptrefbase016 start.");
996     while (state.KeepRunning()) {
997         sptr<RefBase> testObject0(new RefBase());
998         sptr<RefBaseTest> testObject1(new RefBaseTest());
999         testObject0 = testObject1;
1000         AssertEqual(testObject1->GetSptrRefCount(), EXPECTED_REF_COUNT_TWO,
1001             "GetSptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1002     }
1003     BENCHMARK_LOGD("RefbaseTest testSptrefbase016 end.");
1004 }
1005 
1006 /*
1007  * @tc.name: testSptrefbase017
1008  * @tc.desc: test Equal-to operator between the sptr and wptr
1009  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase017)1010 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase017)(benchmark::State& state)
1011 {
1012     BENCHMARK_LOGD("RefbaseTest testSptrefbase017 start.");
1013     while (state.KeepRunning()) {
1014         sptr<RefBase> testObject0(new RefBase());
1015         wptr<RefBase> testObject1(new RefBase());
1016         AssertUnequal(testObject0, testObject1, "testObject0 did not unequal testObject1", state);
1017     }
1018     BENCHMARK_LOGD("RefbaseTest testSptrefbase017 end.");
1019 }
1020 
1021 /*
1022  * @tc.name: testSptrefbase018
1023  * @tc.desc: test Not-equal-to operator between the sptr and wptr
1024  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase018)1025 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase018)(benchmark::State& state)
1026 {
1027     BENCHMARK_LOGD("RefbaseTest testSptrefbase018 start.");
1028     while (state.KeepRunning()) {
1029         sptr<RefBase> testObject0(new RefBase());
1030         wptr<RefBase> testObject1(new RefBase());
1031         AssertUnequal(testObject0, testObject1, "testObject0 did not unequal testObject1", state);
1032     }
1033     BENCHMARK_LOGD("RefbaseTest testSptrefbase018 end.");
1034 }
1035 
1036 /*
1037  * @tc.name: testSptrefbase019
1038  * @tc.desc: test ForceSetRefPtr of sptr
1039  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrefbase019)1040 BENCHMARK_F(BenchmarkRefbaseTest, testSptrefbase019)(benchmark::State& state)
1041 {
1042     BENCHMARK_LOGD("RefbaseTest testSptrefbase019 start.");
1043     while (state.KeepRunning()) {
1044         sptr<RefBase> testObject;
1045         AssertEqual(testObject.GetRefPtr(), nullptr, "testObject.GetRefPtr() did not equal nullptr", state);
1046         RefBase baseObject;
1047         testObject.ForceSetRefPtr(&baseObject);
1048         AssertEqual(testObject.GetRefPtr(), &baseObject, "testObject.GetRefPtr() did not equal &baseObject", state);
1049     }
1050     BENCHMARK_LOGD("RefbaseTest testSptrefbase019 end.");
1051 }
1052 
1053 /*
1054  * @tc.name: testRefbase001
1055  * @tc.desc: test copy of Refbase.
1056  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbase001)1057 BENCHMARK_F(BenchmarkRefbaseTest, testRefbase001)(benchmark::State& state)
1058 {
1059     BENCHMARK_LOGD("RefbaseTest testRefbase001 start.");
1060     while (state.KeepRunning()) {
1061         RefBase baseObject1{};
1062         AssertEqual(baseObject1.GetRefCounter()->GetRefCount(), EXPECTED_REF_COUNT_ONE,
1063             "refs->GetRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1064         RefBase baseObject2(baseObject1);
1065         AssertEqual(baseObject1.GetRefCounter()->GetRefCount(), EXPECTED_REF_COUNT_ONE,
1066             "refs->GetRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1067         RefBase baseObject3;
1068         baseObject3 = baseObject2;
1069         AssertEqual(baseObject1.GetRefCounter()->GetRefCount(), EXPECTED_REF_COUNT_ONE,
1070             "refs->GetRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1071     }
1072     BENCHMARK_LOGD("RefbaseTest testRefbase001 end.");
1073 }
1074 
1075 /*
1076  * @tc.name: testRefbase002
1077  * @tc.desc: test AttemptIncStrong of RefBase.
1078  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbase002)1079 BENCHMARK_F(BenchmarkRefbaseTest, testRefbase002)(benchmark::State& state)
1080 {
1081     BENCHMARK_LOGD("RefbaseTest testRefbase002 start.");
1082     while (state.KeepRunning()) {
1083         RefBase *baseObject = new RefBase();
1084         baseObject->AttemptIncStrong(this);
1085         AssertTrue(baseObject->IsAttemptAcquireSet(), "baseObject->IsAttemptAcquireSet() did not equal true", state);
1086         delete baseObject;
1087     }
1088     BENCHMARK_LOGD("RefbaseTest testRefbase002 end.");
1089 }
1090 
1091 /*
1092  * @tc.name: testRefbase003
1093  * @tc.desc: test AttemptIncStrongRef of RefBase.
1094  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbase003)1095 BENCHMARK_F(BenchmarkRefbaseTest, testRefbase003)(benchmark::State& state)
1096 {
1097     BENCHMARK_LOGD("RefbaseTest testRefbase003 start.");
1098     while (state.KeepRunning()) {
1099         RefBase *baseObject = new RefBase();
1100         baseObject->AttemptIncStrongRef(this);
1101         AssertEqual(baseObject->GetRefCounter()->GetRefCount(), 1, "refs->GetRefCount() did not equal 1", state);
1102         delete baseObject;
1103     }
1104     BENCHMARK_LOGD("RefbaseTest testRefbase003 end.");
1105 }
1106 
1107 /*
1108  * @tc.name: testRefbase004
1109  * @tc.desc: Refbase
1110  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbase004)1111 BENCHMARK_F(BenchmarkRefbaseTest, testRefbase004)(benchmark::State& state)
1112 {
1113     BENCHMARK_LOGD("RefbaseTest testRefbase004 start.");
1114     while (state.KeepRunning()) {
1115         {
1116             sptr<SptrTest> testObject1(new SptrTest());
1117             testObject1->CreateSptr();
1118         }
1119         AssertEqual(g_sptrCount, EXPECTED_REF_COUNT_ZERO, "g_sptrCount did not equal EXPECTED_REF_COUNT_ZERO", state);
1120     }
1121     BENCHMARK_LOGD("RefbaseTest testRefbase004 end.");
1122 }
1123 
1124 /*
1125  * @tc.name: testRefbase005
1126  * @tc.desc: Refbase
1127  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbase005)1128 BENCHMARK_F(BenchmarkRefbaseTest, testRefbase005)(benchmark::State& state)
1129 {
1130     BENCHMARK_LOGD("RefbaseTest testRefbase005 start.");
1131     while (state.KeepRunning()) {
1132         {
1133             sptr<SptrTest1> testObject1(new SptrTest1());
1134             sptr<SptrTest2> testObject2(new SptrTest2());
1135             AssertEqual(g_sptrCount, EXPECTED_REF_COUNT_TWO,
1136                 "g_sptrCount did not equal EXPECTED_REF_COUNT_TWO", state);
1137         }
1138         AssertEqual(g_sptrCount, EXPECTED_REF_COUNT_ZERO, "g_sptrCount did not equal EXPECTED_REF_COUNT_ZERO", state);
1139     }
1140     BENCHMARK_LOGD("RefbaseTest testRefbase005 end.");
1141 }
1142 
1143 /*
1144  * @tc.name: testRefbase006
1145  * @tc.desc: test count of refcounter.
1146  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbase006)1147 BENCHMARK_F(BenchmarkRefbaseTest, testRefbase006)(benchmark::State& state)
1148 {
1149     BENCHMARK_LOGD("RefbaseTest testRefbase006 start.");
1150     while (state.KeepRunning()) {
1151         sptr<RefBase> testObject1(new RefBase());
1152         AssertEqual(testObject1->GetRefCounter()->GetRefCount(), EXPECTED_REF_COUNT_ONE,
1153             "testObject1->GetRefCounter()->GetRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1154         wptr<RefBase> testObject2(testObject1);
1155         AssertEqual(testObject1->GetRefCounter()->GetRefCount(), EXPECTED_REF_COUNT_TWO,
1156             "testObject1->GetRefCounter()->GetRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1157     }
1158     BENCHMARK_LOGD("RefbaseTest testRefbase006 end.");
1159 }
1160 
1161 /*
1162  * @tc.name: testRefbase007
1163  * @tc.desc: test move constructor.
1164  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbase007)1165 BENCHMARK_F(BenchmarkRefbaseTest, testRefbase007)(benchmark::State& state)
1166 {
1167     BENCHMARK_LOGD("RefbaseTest testRefbase007 start.");
1168     while (state.KeepRunning()) {
1169         RefBase baseObject1{};
1170         AssertEqual(baseObject1.GetRefCounter()->GetRefCount(), EXPECTED_REF_COUNT_ONE,
1171             "baseObject1.GetRefCounter()->GetRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1172 
1173         RefBase baseObject2{};
1174         AssertEqual(baseObject2.GetRefCounter()->GetRefCount(), EXPECTED_REF_COUNT_ONE,
1175             "baseObject2.GetRefCounter()->GetRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1176         baseObject2 = std::move(baseObject1);
1177         AssertEqual(baseObject2.GetRefCounter()->GetRefCount(), EXPECTED_REF_COUNT_ONE,
1178             "baseObject2.GetRefCounter()->GetRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1179         AssertEqual(baseObject1.GetRefCounter(), nullptr, "baseObject1.GetRefCounter() did not equal nullptr", state);
1180         AssertEqual(baseObject1.GetSptrRefCount(), EXPECTED_REF_COUNT_ZERO,
1181             "baseObject1.GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ZERO", state);
1182         AssertEqual(baseObject1.GetWptrRefCount(), EXPECTED_REF_COUNT_ZERO,
1183             "baseObject1.GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ZERO", state);
1184 
1185         RefBase baseObject3{};
1186         AssertEqual(baseObject3.GetRefCounter()->GetRefCount(), EXPECTED_REF_COUNT_ONE,
1187             "baseObject3.GetRefCounter()->GetRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1188         baseObject3 = std::move(baseObject2);
1189         AssertEqual(baseObject3.GetRefCounter()->GetRefCount(), EXPECTED_REF_COUNT_ONE,
1190             "baseObject3.GetRefCounter()->GetRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1191         AssertEqual(baseObject2.GetRefCounter(), nullptr, "baseObject2.GetRefCounter() did not equal nullptr", state);
1192         AssertEqual(baseObject2.GetSptrRefCount(), EXPECTED_REF_COUNT_ZERO,
1193             "baseObject2.GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ZERO", state);
1194         AssertEqual(baseObject2.GetWptrRefCount(), EXPECTED_REF_COUNT_ZERO,
1195             "baseObject2.GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ZERO", state);
1196 
1197         baseObject2 = std::move(baseObject1);
1198         AssertEqual(baseObject1.GetRefCounter(), baseObject2.GetRefCounter(),
1199             "baseObject1.GetRefCounter() did not equal baseObject2.GetRefCounter()", state);
1200 
1201         RefBase baseObject4(std::move(baseObject3));
1202         AssertEqual(baseObject4.GetRefCounter()->GetRefCount(), EXPECTED_REF_COUNT_ONE,
1203             "refs->GetRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1204     }
1205     BENCHMARK_LOGD("RefbaseTest testRefbase007 end.");
1206 }
1207 
1208 const int ONE_REF_COUNT = 1;
1209 const int TWO_REF_COUNT = 2;
1210 const int THREE_REF_COUNT = 3;
1211 
1212 template <typename T1, typename T2>
CompOrigWptrAndTarWptr001(const wptr<T1> & origWptr,const wptr<T2> & tarWptr,int value,benchmark::State & state)1213 void CompOrigWptrAndTarWptr001(const wptr<T1> &origWptr, const wptr<T2> &tarWptr, int value, benchmark::State& state)
1214 {
1215     AssertEqual(static_cast<void *>(origWptr.GetRefPtr()), static_cast<void *>(tarWptr.GetRefPtr()),
1216         "testOrigWptrObject.GetRefPtr() did not equal tarWptr.GetRefPtr()", state);
1217 
1218     AssertEqual(static_cast<void *>(&(*origWptr)), static_cast<void *>(&(*tarWptr)),
1219         "&(*testOrigWptrObject) did not equal &(*tarWptr)", state);
1220 
1221     AssertEqual(tarWptr->GetWptrRefCount(), origWptr->GetWptrRefCount(),
1222         "tarWptr->GetWptrRefCount() did not equal testOrigWptrObject->GetWptrRefCount()", state);
1223 
1224     AssertEqual(tarWptr.GetWeakRefCount(), origWptr.GetWeakRefCount(),
1225         "tarWptr.GetWeakRefCount() did not equal testOrigWptrObject.GetWeakRefCount()", state);
1226 
1227     AssertEqual(tarWptr->GetWptrRefCount(), ONE_REF_COUNT,
1228         "tarWptr->GetWptrRefCount() did not equal ONE_REF_COUNT", state);
1229 
1230     if (value == TWO_REF_COUNT) {
1231         AssertEqual(tarWptr.GetWeakRefCount(), TWO_REF_COUNT,
1232             "tarWptr.GetWeakRefCount() did not equal TWO_REF_COUNT", state);
1233     }
1234 
1235     if (value == THREE_REF_COUNT) {
1236         AssertEqual(tarWptr.GetWeakRefCount(), THREE_REF_COUNT,
1237             "tarWptr.GetWeakRefCount() did not equal THREE_REF_COUNT", state);
1238     }
1239 }
1240 
1241 template <typename T1, typename T2>
CompOrigSptrAndTarWptr002(const sptr<T1> & origSptr,const wptr<T2> & tarWptr,int value,benchmark::State & state)1242 void CompOrigSptrAndTarWptr002(const sptr<T1> &origSptr, const wptr<T2> &tarWptr, int value, benchmark::State& state)
1243 {
1244     AssertEqual(static_cast<void *>(origSptr.GetRefPtr()), static_cast<void *>(tarWptr.GetRefPtr()),
1245         "origSptr.GetRefPtr() did not equal tarWptr.GetRefPtr()", state);
1246 
1247     AssertEqual(static_cast<void *>(&(*origSptr)), static_cast<void *>(&(*tarWptr)),
1248         "&(*origSptr) did not equal &(*tarWptr)", state);
1249 
1250     AssertEqual(tarWptr->GetSptrRefCount(), origSptr->GetSptrRefCount(),
1251         "tarWptr->GetSptrRefCount() did not equal origSptr->GetSptrRefCount()", state);
1252 
1253     AssertEqual(tarWptr->GetWptrRefCount(), origSptr->GetWptrRefCount(),
1254         "tarWptr->GetWptrRefCount() did not equal origSptr->GetWptrRefCount()", state);
1255 
1256     AssertEqual(tarWptr->GetSptrRefCount(), ONE_REF_COUNT,
1257         "tarWptr->GetSptrRefCount() did not equal ONE_REF_COUNT", state);
1258 
1259     if (value == TWO_REF_COUNT) {
1260         AssertEqual(tarWptr->GetWptrRefCount(), TWO_REF_COUNT,
1261             "tarWptr->GetWptrRefCount() did not equal TWO_REF_COUNT", state);
1262     }
1263 
1264     if (value == THREE_REF_COUNT) {
1265         AssertEqual(tarWptr->GetWptrRefCount(), THREE_REF_COUNT,
1266             "tarWptr->GetWptrRefCount() did not equal THREE_REF_COUNT", state);
1267     }
1268 
1269     AssertEqual(tarWptr.GetWeakRefCount(), ONE_REF_COUNT,
1270         "tarWptr.GetWeakRefCount() did not equal ONE_REF_COUNT", state);
1271 }
1272 
1273 /*
1274  * @tc.name: testWptrefbase001
1275  * @tc.desc: Copy constructor with same managed class type.
1276  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase001)1277 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase001)(benchmark::State& state)
1278 {
1279     BENCHMARK_LOGD("RefbaseTest testWptrefbase001 start.");
1280     while (state.KeepRunning()) {
1281         // test wptr<T>::wptr(const wptr<T>&)
1282         wptr<WptrTest> testOrigWptrObject(new WptrTest());
1283         AssertEqual(testOrigWptrObject->GetWptrRefCount(), EXPECTED_REF_COUNT_ONE,
1284             "testOrigWptrObject->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1285 
1286         wptr<WptrTest> testTargetWptrObject1(testOrigWptrObject);
1287         CompOrigWptrAndTarWptr001(testOrigWptrObject, testTargetWptrObject1, EXPECTED_REF_COUNT_TWO, state);
1288 
1289         // test wptr<T>::operator=(const wptr<T>&)
1290         wptr<WptrTest> testTargetWptrObject2(new WptrTest());
1291         AssertEqual(testTargetWptrObject2->GetWptrRefCount(), EXPECTED_REF_COUNT_ONE,
1292             "testTargetWptrObject2->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1293 
1294         testTargetWptrObject2 = testOrigWptrObject;
1295         CompOrigWptrAndTarWptr001(testOrigWptrObject, testTargetWptrObject2, EXPECTED_REF_COUNT_THREE, state);
1296 
1297         // test wptr<T>::wptr(const sptr<T>&)
1298         sptr<WptrTest> testOrigSptrObject(new WptrTest());
1299         AssertEqual(testOrigSptrObject->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
1300             "testOrigSptrObject->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1301 
1302         wptr<WptrTest> testTargetWptrObject3(testOrigSptrObject);
1303         CompOrigSptrAndTarWptr002(testOrigSptrObject, testTargetWptrObject3, EXPECTED_REF_COUNT_TWO, state);
1304 
1305         // test wptr<T>::operator=(const sptr<T>&)
1306         wptr<WptrTest> testTargetWptrObject4(new WptrTest());
1307         AssertEqual(testTargetWptrObject4->GetWptrRefCount(), EXPECTED_REF_COUNT_ONE,
1308             "testTargetWptrObject4->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1309 
1310         testTargetWptrObject4 = testOrigSptrObject;
1311         CompOrigSptrAndTarWptr002(testOrigSptrObject, testTargetWptrObject4, EXPECTED_REF_COUNT_THREE, state);
1312     }
1313     BENCHMARK_LOGD("RefbaseTest testWptrefbase001 end.");
1314 }
1315 
1316 /*
1317  * @tc.name: testWptrefbase002
1318  * @tc.desc: Copy constructor with different managed class type.
1319  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase002)1320 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase002)(benchmark::State& state)
1321 {
1322     BENCHMARK_LOGD("RefbaseTest testWptrefbase002 start.");
1323     while (state.KeepRunning()) {
1324         // test wptr<T>::wptr(const wptr<O>&)
1325         wptr<WptrTest2> testOrigWptrObject(new WptrTest2());
1326         AssertEqual(testOrigWptrObject->GetWptrRefCount(), EXPECTED_REF_COUNT_ONE,
1327             "testOrigWptrObject->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1328 
1329         wptr<WptrTest> testTargetWptrObject1(testOrigWptrObject);
1330         CompOrigWptrAndTarWptr001(testOrigWptrObject, testTargetWptrObject1, EXPECTED_REF_COUNT_TWO, state);
1331 
1332         // test wptr<T>::operator=(const wptr<O>&)
1333         wptr<WptrTest> testTargetWptrObject2(new WptrTest());
1334         AssertEqual(testTargetWptrObject2->GetWptrRefCount(), EXPECTED_REF_COUNT_ONE,
1335             "testTargetWptrObject2->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1336 
1337         testTargetWptrObject2 = testOrigWptrObject;
1338         CompOrigWptrAndTarWptr001(testOrigWptrObject, testTargetWptrObject2, EXPECTED_REF_COUNT_THREE, state);
1339 
1340         // test wptr<T>::wptr(const sptr<O>&)
1341         sptr<WptrTest2> testOrigSptrObject(new WptrTest2());
1342         AssertEqual(testOrigSptrObject->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
1343             "testOrigSptrObject->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1344 
1345         wptr<WptrTest> testTargetWptrObject3(testOrigSptrObject);
1346         CompOrigSptrAndTarWptr002(testOrigSptrObject, testTargetWptrObject3, EXPECTED_REF_COUNT_TWO, state);
1347 
1348         // test wptr<T>::operator=(const sptr<O>&)
1349         wptr<WptrTest> testTargetWptrObject4(new WptrTest());
1350         AssertEqual(testTargetWptrObject4->GetWptrRefCount(), EXPECTED_REF_COUNT_ONE,
1351             "testTargetWptrObject4->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1352 
1353         testTargetWptrObject4 = testOrigSptrObject;
1354         CompOrigSptrAndTarWptr002(testOrigSptrObject, testTargetWptrObject4, EXPECTED_REF_COUNT_THREE, state);
1355     }
1356     BENCHMARK_LOGD("RefbaseTest testWptrefbase002 end.");
1357 }
1358 
1359 /*
1360  * @tc.name: testWptrefbase003
1361  * @tc.desc: Refbase
1362  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase003)1363 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase003)(benchmark::State& state)
1364 {
1365     BENCHMARK_LOGD("RefbaseTest testWptrefbase003 start.");
1366     while (state.KeepRunning()) {
1367         const wptr<WptrTest> &testObject1(new WptrTest());
1368         wptr<WptrTest> testObject2(testObject1);
1369         AssertEqual(testObject1.GetRefPtr(), testObject2.GetRefPtr(),
1370             "testObject1.GetRefPtr() did not equal testObject2.GetRefPtr()", state);
1371         AssertEqual(testObject1->GetWptrRefCount(), EXPECTED_REF_COUNT_ONE,
1372             "testObject1->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1373         AssertEqual(testObject2->GetWptrRefCount(), EXPECTED_REF_COUNT_ONE,
1374             "testObject2->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1375         AssertEqual(testObject1.GetRefPtr(), testObject2.GetRefPtr(),
1376             "testObject1.GetRefPtr() did not equal testObject2.GetRefPtr()", state);
1377     }
1378     BENCHMARK_LOGD("RefbaseTest testWptrefbase003 end.");
1379 }
1380 
1381 /*
1382  * @tc.name: testWptrefbase004
1383  * @tc.desc: Refbase
1384  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase004)1385 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase004)(benchmark::State& state)
1386 {
1387     BENCHMARK_LOGD("RefbaseTest testWptrefbase004 start.");
1388     while (state.KeepRunning()) {
1389         const sptr<WptrTest2> &testObject1(new WptrTest2());
1390         AssertUnequal(testObject1, nullptr, "testObject1 was not different from nullptr", state);
1391         wptr<WptrTest> testObject2 = testObject1;
1392         AssertEqual(testObject1->GetWptrRefCount(), 2, "testObject1->GetWptrRefCount() did not equal 2", state);
1393     }
1394     BENCHMARK_LOGD("RefbaseTest testWptrefbase004 end.");
1395 }
1396 
1397 /*
1398  * @tc.name: testWptrefbase005
1399  * @tc.desc: wptr without managed object
1400  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase005)1401 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase005)(benchmark::State& state)
1402 {
1403     BENCHMARK_LOGD("RefbaseTest testWptrefbase005 start.");
1404     while (state.KeepRunning()) {
1405         wptr<WptrTest> testObject3;
1406         AssertEqual(testObject3.GetRefPtr(), nullptr, "testObject3.GetRefPtr() did not equal nullptr", state);
1407     }
1408     BENCHMARK_LOGD("RefbaseTest testWptrefbase005 end.");
1409 }
1410 
1411 /*
1412  * @tc.name: testWptrefbase006
1413  * @tc.desc: Refbase
1414  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase006)1415 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase006)(benchmark::State& state)
1416 {
1417     BENCHMARK_LOGD("RefbaseTest testWptrefbase006 start.");
1418     while (state.KeepRunning()) {
1419         wptr<WptrTest> testObject1 = new WptrTest();
1420         wptr<WptrTest> &testObject2 = testObject1;
1421         AssertEqual(testObject2->GetWptrRefCount(), EXPECTED_REF_COUNT_ONE,
1422             "testObject2->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1423     }
1424     BENCHMARK_LOGD("RefbaseTest testWptrefbase006 end.");
1425 }
1426 
1427 /*
1428  * @tc.name: testWptrefbase007
1429  * @tc.desc: Refbase
1430  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase007)1431 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase007)(benchmark::State& state)
1432 {
1433     BENCHMARK_LOGD("RefbaseTest testWptrefbase007 start.");
1434     while (state.KeepRunning()) {
1435         wptr<WptrTest2> testObject1 = new WptrTest2();
1436         wptr<WptrTest2> testObject2 = testObject1.GetRefPtr();
1437         AssertEqual(testObject1->GetWptrRefCount(), EXPECTED_REF_COUNT_TWO,
1438             "testObject1->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1439     }
1440     BENCHMARK_LOGD("RefbaseTest testWptrefbase007 end.");
1441 }
1442 
1443 /*
1444  * @tc.name: testWptrefbase008
1445  * @tc.desc: Refbase
1446  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase008)1447 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase008)(benchmark::State& state)
1448 {
1449     BENCHMARK_LOGD("RefbaseTest testWptrefbase008 start.");
1450     while (state.KeepRunning()) {
1451         wptr<WptrTest> testObject1 = new WptrTest();
1452         wptr<WptrTest2> testObject2;
1453         testObject2 = testObject1.GetRefPtr();
1454         AssertEqual(testObject1->GetWptrRefCount(), EXPECTED_REF_COUNT_TWO,
1455             "testObject1->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1456     }
1457     BENCHMARK_LOGD("RefbaseTest testWptrefbase008 end.");
1458 }
1459 
1460 /*
1461  * @tc.name: testWptrefbase009
1462  * @tc.desc: test Equal-to operator between two wptrs
1463  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase009)1464 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase009)(benchmark::State& state)
1465 {
1466     BENCHMARK_LOGD("RefbaseTest testWptrefbase009 start.");
1467     while (state.KeepRunning()) {
1468         wptr<RefBase> testObject0(new RefBase());
1469         wptr<RefBase> testObject1(new RefBase());
1470         AssertUnequal(testObject0, testObject1, "testObject0 did not unequal testObject1", state);
1471     }
1472     BENCHMARK_LOGD("RefbaseTest testWptrefbase009 end.");
1473 }
1474 
1475 /*
1476  * @tc.name: testWptrefbase010
1477  * @tc.desc: test Not-equal-to operator between two wptrs
1478  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase010)1479 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase010)(benchmark::State& state)
1480 {
1481     BENCHMARK_LOGD("RefbaseTest testWptrefbase010 start.");
1482     while (state.KeepRunning()) {
1483         wptr<RefBase> testObject0(new RefBase());
1484         wptr<RefBase> testObject1(new RefBase());
1485         AssertUnequal(testObject0, testObject1, "testObject0 did not unequal testObject1", state);
1486     }
1487     BENCHMARK_LOGD("RefbaseTest testWptrefbase010 end.");
1488 }
1489 
1490 /*
1491  * @tc.name: testWptrefbase011
1492  * @tc.desc: test Equal-to operator between the wptr and input sptr object
1493  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase011)1494 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase011)(benchmark::State& state)
1495 {
1496     BENCHMARK_LOGD("RefbaseTest testWptrefbase011 start.");
1497     while (state.KeepRunning()) {
1498         wptr<RefBase> testObject0(new RefBase());
1499         sptr<RefBase> testObject1(new RefBase());
1500         AssertUnequal(testObject0, testObject1, "testObject0 did not unequal testObject1", state);
1501         AssertEqual(testObject1->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
1502             "GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1503     }
1504     BENCHMARK_LOGD("RefbaseTest testWptrefbase011 end.");
1505 }
1506 
1507 /*
1508  * @tc.name: testWptrefbase012
1509  * @tc.desc: test Not-equal-to operator between the wptr and input sptr object
1510  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase012)1511 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase012)(benchmark::State& state)
1512 {
1513     BENCHMARK_LOGD("RefbaseTest testWptrefbase012 start.");
1514     while (state.KeepRunning()) {
1515         wptr<RefBase> testObject0(new RefBase());
1516         sptr<RefBase> testObject1(new RefBase());
1517         AssertUnequal(testObject0, testObject1, "testObject0 did not unequal testObject1", state);
1518         AssertEqual(testObject1->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
1519             "GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1520     }
1521     BENCHMARK_LOGD("RefbaseTest testWptrefbase012 end.");
1522 }
1523 
1524 /*
1525  * @tc.name: testWptrefbase013
1526  * @tc.desc: test AttemptIncStrongRef of wptr
1527  */
BENCHMARK_F(BenchmarkRefbaseTest,testWptrefbase013)1528 BENCHMARK_F(BenchmarkRefbaseTest, testWptrefbase013)(benchmark::State& state)
1529 {
1530     BENCHMARK_LOGD("RefbaseTest testWptrefbase013 start.");
1531     while (state.KeepRunning()) {
1532         RefBase *baseObject = new RefBase();
1533         wptr<RefBase> testObject(baseObject);
1534         testObject.AttemptIncStrongRef(this);
1535         AssertEqual(baseObject->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
1536             "baseObject->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1537     }
1538     BENCHMARK_LOGD("RefbaseTest testWptrefbase013 end.");
1539 }
1540 
1541 /*
1542  * @tc.name: testSptrWptrefbase001
1543  * @tc.desc: test interaction between sptr and wptr.
1544  */
BENCHMARK_F(BenchmarkRefbaseTest,testSptrWptrefbase001)1545 BENCHMARK_F(BenchmarkRefbaseTest, testSptrWptrefbase001)(benchmark::State& state)
1546 {
1547     BENCHMARK_LOGD("RefbaseTest testSptrWptrefbase001 start.");
1548     while (state.KeepRunning()) {
1549         wptr<RefBase> testObject1(new RefBase());
1550         AssertEqual(testObject1->GetWptrRefCount(), EXPECTED_REF_COUNT_ONE,
1551             "testObject1->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1552         {
1553             sptr<RefBase> testObject2{};
1554             testObject2 = testObject1;
1555             AssertEqual(testObject2->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
1556             "testObject2->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1557             AssertEqual(testObject2->GetWptrRefCount(), EXPECTED_REF_COUNT_TWO,
1558             "testObject2->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1559 
1560             sptr<RefBase> testObject3 = testObject1.promote();
1561             AssertEqual(testObject2->GetSptrRefCount(), EXPECTED_REF_COUNT_TWO,
1562             "testObject2->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1563             AssertEqual(testObject2->GetWptrRefCount(), EXPECTED_REF_COUNT_THREE,
1564             "testObject2->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_THREE", state);
1565             testObject2->ExtendObjectLifetime();
1566         }
1567         AssertEqual(testObject1->GetWptrRefCount(), EXPECTED_REF_COUNT_ONE,
1568             "testObject1->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1569     }
1570     BENCHMARK_LOGD("RefbaseTest testSptrWptrefbase001 end.");
1571 }
1572 
1573 /*
1574  * @tc.name: testRefbaseDebug001
1575  * @tc.desc: Test for single thread. Tracker can be enabled after construction
1576  *           of sptr.
1577  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbaseDebug001)1578 BENCHMARK_F(BenchmarkRefbaseTest, testRefbaseDebug001)(benchmark::State& state)
1579 {
1580     BENCHMARK_LOGD("RefbaseTest testRefbaseDebug001 start.");
1581     while (state.KeepRunning()) {
1582         sptr<RefBase> testObject1(new RefBase());
1583         testObject1->EnableTracker();
1584         sptr<RefBase> testObject2(testObject1);
1585         AssertEqual(testObject2->GetSptrRefCount(), EXPECTED_REF_COUNT_TWO,
1586             "testObject2->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1587         wptr<RefBase> testObject3(testObject2);
1588         wptr<RefBase> testObject4(testObject3);
1589         AssertEqual(testObject4->GetWptrRefCount(), EXPECTED_REF_COUNT_THREE,
1590             "testObject4->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_THREE", state);
1591     }
1592     BENCHMARK_LOGD("RefbaseTest testRefbaseDebug001 end.");
1593 }
1594 
1595 /*
1596  * @tc.name: testRefbaseDebug002
1597  * @tc.desc: Test for single thread. Tracker can be enabled after construction
1598  *           of wptr.
1599  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbaseDebug002)1600 BENCHMARK_F(BenchmarkRefbaseTest, testRefbaseDebug002)(benchmark::State& state)
1601 {
1602     BENCHMARK_LOGD("RefbaseTest testRefbaseDebug002 start.");
1603     while (state.KeepRunning()) {
1604         wptr<RefBase> testObject1(new RefBase());
1605         testObject1->EnableTracker();
1606         sptr<RefBase> testObject2 = testObject1.promote();
1607         AssertEqual(testObject2->GetSptrRefCount(), EXPECTED_REF_COUNT_ONE,
1608             "testObject2->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1609         wptr<RefBase> testObject3(testObject2);
1610         wptr<RefBase> testObject4(testObject3);
1611         AssertEqual(testObject4->GetWptrRefCount(), EXPECTED_REF_COUNT_THREE,
1612             "testObject4->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_THREE", state);
1613     }
1614     BENCHMARK_LOGD("RefbaseTest testRefbaseDebug002 end.");
1615 }
1616 
1617 /*
1618  * @tc.name: testRefbaseDebug003
1619  * @tc.desc: Test for single thread. Tracker can be enabled with construction
1620  *           of sptr.
1621  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbaseDebug003)1622 BENCHMARK_F(BenchmarkRefbaseTest, testRefbaseDebug003)(benchmark::State& state)
1623 {
1624     BENCHMARK_LOGD("RefbaseTest testRefbaseDebug003 start.");
1625     while (state.KeepRunning()) {
1626         sptr<TestDebug> testObject1(new TestDebug());
1627         sptr<TestDebug> testObject2(testObject1);
1628         sptr<TestDebug> testObject3;
1629         AssertEqual(testObject2->GetSptrRefCount(), EXPECTED_REF_COUNT_TWO,
1630             "testObject2->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1631         testObject3 = testObject2;
1632         wptr<TestDebug> testObject4(testObject3);
1633         AssertEqual(testObject4->GetWptrRefCount(), EXPECTED_REF_COUNT_FOUR,
1634             "testObject4->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_FOUR", state);
1635     }
1636     BENCHMARK_LOGD("RefbaseTest testRefbaseDebug003 end.");
1637 }
1638 
1639 /*
1640  * @tc.name: testRefbaseDebug004
1641  * @tc.desc: Test for mult-thread.
1642  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefbaseDebug004)1643 BENCHMARK_F(BenchmarkRefbaseTest, testRefbaseDebug004)(benchmark::State& state)
1644 {
1645     BENCHMARK_LOGD("RefbaseTest testRefbaseDebug004 start.");
1646     while (state.KeepRunning()) {
1647         sptr<TestDebug> testObject1(new TestDebug());
1648         std::thread subThread {[&testObject1, &state]() {
1649             sptr<TestDebug> subTestObject1(testObject1);
1650             AssertEqual(testObject1->GetSptrRefCount(), EXPECTED_REF_COUNT_TWO,
1651                 "testObject1->GetSptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1652             wptr<TestDebug> subTestObject2(subTestObject1);
1653             wptr<TestDebug> subTestObject3(subTestObject2);
1654         }};
1655         wptr<TestDebug> testObject2(testObject1);
1656         wptr<TestDebug> testObject3(testObject2);
1657         subThread.join();
1658         AssertEqual(testObject3->GetWptrRefCount(), EXPECTED_REF_COUNT_TWO,
1659             "testObject3->GetWptrRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1660     }
1661     BENCHMARK_LOGD("RefbaseTest testRefbaseDebug004 end.");
1662 }
1663 
1664 /*
1665  * @tc.name: testWeakRefCounter001
1666  * @tc.desc: test CreateWeakRef of Refbase,
1667  *           and GetRefPtr, IncWeakRefCount, DecWeakRefCount, GetWeakRefCount, AttemptIncStrongRef of WeakRefCounter.
1668  */
BENCHMARK_F(BenchmarkRefbaseTest,testWeakRefCounter001)1669 BENCHMARK_F(BenchmarkRefbaseTest, testWeakRefCounter001)(benchmark::State& state)
1670 {
1671     BENCHMARK_LOGD("RefbaseTest testWeakRefCounter001 start.");
1672     while (state.KeepRunning()) {
1673         RefBase *baseObject1 = new RefBase();
1674         RefBase *newRefbase = new RefBase();
1675         WeakRefCounter *newWeakRef = baseObject1->CreateWeakRef(newRefbase);
1676         AssertEqual(newWeakRef->GetRefPtr(), newRefbase,
1677             "WeakRefCounter->GetRefPtr() did not equal RefBase object", state);
1678         newWeakRef->IncWeakRefCount(this);
1679         newWeakRef->IncWeakRefCount(this);
1680         AssertEqual(newWeakRef->GetWeakRefCount(), 2, "WeakRefCounter->GetWeakRefCount() did not equal 2", state);
1681         newWeakRef->AttemptIncStrongRef(this);
1682         AssertEqual(baseObject1->GetRefCounter()->GetStrongRefCount(), EXPECTED_REF_COUNT_ONE,
1683             "RefCounter->GetStrongRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1684         newWeakRef->DecWeakRefCount(this);
1685         AssertEqual(newWeakRef->GetWeakRefCount(), EXPECTED_REF_COUNT_ONE,
1686             "WeakRefCounter->GetWeakRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1687         newWeakRef->DecWeakRefCount(this);
1688         delete newRefbase;
1689         delete baseObject1;
1690     }
1691     BENCHMARK_LOGD("RefbaseTest testWeakRefCounter001 end.");
1692 }
1693 
1694 /*
1695  * @tc.name: testRefCounter001
1696  * @tc.desc: Test for IncRefCount, DecRefCount and GetRefCount
1697  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefCounter001)1698 BENCHMARK_F(BenchmarkRefbaseTest, testRefCounter001)(benchmark::State& state)
1699 {
1700     BENCHMARK_LOGD("RefbaseTest testRefCounter001 start.");
1701     while (state.KeepRunning()) {
1702         RefCounter *refs = new RefCounter();
1703         refs->IncRefCount();
1704         refs->IncRefCount();
1705         AssertEqual(refs->GetRefCount(), EXPECTED_REF_COUNT_TWO,
1706             "refs->GetRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1707         refs->DecRefCount();
1708         AssertEqual(refs->GetRefCount(), EXPECTED_REF_COUNT_ONE,
1709             "refs->GetRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1710         refs->DecRefCount();
1711     }
1712     BENCHMARK_LOGD("RefbaseTest testRefCounter001 end.");
1713 }
1714 
1715 /*
1716 @tc.name: testRefCounter002
1717 @tc.desc: Test for SetCallback, RemoveCallback and IsRefPtrValid
1718 */
BENCHMARK_F(BenchmarkRefbaseTest,testRefCounter002)1719 BENCHMARK_F(BenchmarkRefbaseTest, testRefCounter002)(benchmark::State& state)
1720 {
1721     BENCHMARK_LOGD("RefbaseTest testRefCounter002 start.");
1722     while (state.KeepRunning()) {
1723         RefCounter *refs = new RefCounter();
1724         int externalVariable = 0;
1725 
1726         // Use the SetCallback method to set a lambda function as a
1727         // callback that sets the value of externalVariable to 42 (an arbitrary value)
1728         refs->SetCallback([&externalVariable]() { externalVariable = 42; });
1729         AssertTrue(refs->IsRefPtrValid(), "refs->IsRefPtrValid() did not return true", state);
1730         refs->ExtendObjectLifetime();
1731         refs->IncWeakRefCount(this);
1732         refs->DecWeakRefCount(this);
1733         AssertEqual(externalVariable, 42, "externalVariable did not equal 42", state);
1734         refs->RemoveCallback();
1735         AssertFalse(refs->IsRefPtrValid(), "refs->IsRefPtrValid() did not return false", state);
1736         delete refs;
1737     }
1738     BENCHMARK_LOGD("RefbaseTest testRefCounter002 end.");
1739 }
1740 
1741 /*
1742  * @tc.name: testRefCounter003
1743  * @tc.desc: Test for IncStrongRefCount, DecStrongRefCount and GetStrongRefCount
1744  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefCounter003)1745 BENCHMARK_F(BenchmarkRefbaseTest, testRefCounter003)(benchmark::State& state)
1746 {
1747     BENCHMARK_LOGD("RefbaseTest testRefCounter003 start.");
1748     while (state.KeepRunning()) {
1749         RefCounter *refs = new RefCounter();
1750         refs->IncStrongRefCount(this);
1751         int strongCnt = refs->IncStrongRefCount(this);
1752         AssertEqual(strongCnt, EXPECTED_REF_COUNT_ONE,
1753             "Before IncStrongRefCount, strong count was not EXPECTED_REF_COUNT_ONE", state);
1754         AssertEqual(refs->GetStrongRefCount(), EXPECTED_REF_COUNT_TWO,
1755             "After increments, refs->GetStrongRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1756         refs->DecStrongRefCount(this);
1757         AssertEqual(refs->GetStrongRefCount(), EXPECTED_REF_COUNT_ONE,
1758             "After decrement, refs->GetStrongRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1759         strongCnt = refs->DecStrongRefCount(this);
1760         AssertEqual(strongCnt, EXPECTED_REF_COUNT_ONE,
1761             "Before DecStrongRefCount, strong count was not EXPECTED_REF_COUNT_ONE", state);
1762         AssertEqual(refs->GetStrongRefCount(), EXPECTED_REF_COUNT_ZERO,
1763             "At the end, refs->GetStrongRefCount() did not equal EXPECTED_REF_COUNT_ZERO", state);
1764         delete refs;
1765     }
1766     BENCHMARK_LOGD("RefbaseTest testRefCounter003 end.");
1767 }
1768 
1769 /*
1770  * @tc.name: testRefCounter004
1771  * @tc.desc: Test for IncWeakRefCount, DecWeakRefCount and GetWeakRefCount
1772  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefCounter004)1773 BENCHMARK_F(BenchmarkRefbaseTest, testRefCounter004)(benchmark::State& state)
1774 {
1775     BENCHMARK_LOGD("RefbaseTest testRefCounter004 start.");
1776     while (state.KeepRunning()) {
1777         RefCounter *refs = new RefCounter();
1778         refs->IncWeakRefCount(this);
1779         int count = refs->IncWeakRefCount(this);
1780         AssertEqual(count, EXPECTED_REF_COUNT_ONE,
1781             "Before IncWeakRefCount, weak count was not EXPECTED_REF_COUNT_ONE", state);
1782         AssertEqual(refs->GetWeakRefCount(), EXPECTED_REF_COUNT_TWO,
1783             "refs->GetWeakRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1784         refs->DecWeakRefCount(this);
1785         count = refs->DecWeakRefCount(this);
1786         AssertEqual(count, EXPECTED_REF_COUNT_ONE,
1787             "Before DecWeakRefCount, weak count was not EXPECTED_REF_COUNT_ONE", state);
1788         AssertEqual(refs->GetWeakRefCount(), EXPECTED_REF_COUNT_ZERO,
1789             "At the end, refs->GetWeakRefCount() did not equal EXPECTED_REF_COUNT_ZERO", state);
1790         delete refs;
1791     }
1792     BENCHMARK_LOGD("RefbaseTest testRefCounter004 end.");
1793 }
1794 
1795 /*
1796  * @tc.name: testRefCounter005
1797  * @tc.desc: Test for SetAttemptAcquire, IsAttemptAcquireSet and ClearAttemptAcquire
1798  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefCounter005)1799 BENCHMARK_F(BenchmarkRefbaseTest, testRefCounter005)(benchmark::State& state)
1800 {
1801     BENCHMARK_LOGD("RefbaseTest testRefCounter005 start.");
1802     while (state.KeepRunning()) {
1803         RefCounter *refs = new RefCounter();
1804         refs->SetAttemptAcquire();
1805         AssertTrue(refs->IsAttemptAcquireSet(), "refs->IsAttemptAcquireSet() did not return true", state);
1806         refs->ClearAttemptAcquire();
1807         AssertFalse(refs->IsAttemptAcquireSet(), "refs->IsAttemptAcquireSet() did not return false", state);
1808         delete refs;
1809     }
1810     BENCHMARK_LOGD("RefbaseTest testRefCounter005 end.");
1811 }
1812 
1813 /*
1814  * @tc.name: testRefCounter006
1815  * @tc.desc: Test for AttemptIncStrongRef
1816  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefCounter006)1817 BENCHMARK_F(BenchmarkRefbaseTest, testRefCounter006)(benchmark::State& state)
1818 {
1819     BENCHMARK_LOGD("RefbaseTest testRefCounter006 start.");
1820     while (state.KeepRunning()) {
1821         RefCounter *refs = new RefCounter();
1822         int count = 0;
1823         bool result = refs->AttemptIncStrongRef(this, count);
1824         AssertTrue(result, "refs->AttemptIncStrongRef() did not return true", state);
1825         AssertEqual(count, INITIAL_PRIMARY_VALUE, "outCount did not equal INITIAL_PRIMARY_VALUE", state);
1826         AssertEqual(refs->GetStrongRefCount(), EXPECTED_REF_COUNT_ONE,
1827             "refs->GetStrongRefCount() did not equal EXPECTED_REF_COUNT_ONE", state);
1828         refs->DecStrongRefCount(this);
1829         result = refs->AttemptIncStrongRef(this, count);
1830         AssertFalse(result, "refs->AttemptIncStrongRef() did not return false", state);
1831         AssertEqual(refs->GetStrongRefCount(), EXPECTED_REF_COUNT_ZERO,
1832             "refs->GetStrongRefCount() did not equal EXPECTED_REF_COUNT_ZERO", state);
1833         refs->IncStrongRefCount(this);
1834         result = refs->AttemptIncStrongRef(this, count);
1835         AssertTrue(result, "refs->AttemptIncStrongRef() did not return true", state);
1836         AssertEqual(refs->GetStrongRefCount(), EXPECTED_REF_COUNT_TWO,
1837             "refs->GetStrongRefCount() did not equal EXPECTED_REF_COUNT_TWO", state);
1838         delete refs;
1839     }
1840     BENCHMARK_LOGD("RefbaseTest testRefCounter006 end.");
1841 }
1842 
1843 /*
1844  * @tc.name: testRefCounter007
1845  * @tc.desc: Test for AttemptIncStrong
1846  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefCounter007)1847 BENCHMARK_F(BenchmarkRefbaseTest, testRefCounter007)(benchmark::State& state)
1848 {
1849     BENCHMARK_LOGD("RefbaseTest testRefCounter007 start.");
1850     constexpr int incrementByOne = 1;
1851     constexpr int incrementByThree = 3;
1852     while (state.KeepRunning()) {
1853         RefCounter *refs = new RefCounter();
1854         bool result = refs->AttemptIncStrong(this);
1855         AssertTrue(result, "refs->AttemptIncStrong() did not return true", state);
1856         AssertEqual(refs->GetStrongRefCount(), INITIAL_PRIMARY_VALUE + incrementByOne,
1857             "refs->GetStrongRefCount() did not equal INITIAL_PRIMARY_VALUE + incrementByOne", state);
1858         refs->DecStrongRefCount(this);
1859         result = refs->AttemptIncStrong(this);
1860         AssertTrue(result, "refs->AttemptIncStrong() did not return true", state);
1861         AssertEqual(refs->GetStrongRefCount(), INITIAL_PRIMARY_VALUE + incrementByOne,
1862             "refs->GetStrongRefCount() did not equal INITIAL_PRIMARY_VALUE + incrementByOne", state);
1863         refs->IncStrongRefCount(this);
1864         result = refs->AttemptIncStrong(this);
1865         AssertTrue(result, "refs->AttemptIncStrong() did not return true", state);
1866         AssertEqual(refs->GetStrongRefCount(), INITIAL_PRIMARY_VALUE + incrementByThree,
1867             "refs->GetStrongRefCount() did not equal INITIAL_PRIMARY_VALUE + incrementByThree", state);
1868         delete refs;
1869     }
1870     BENCHMARK_LOGD("RefbaseTest testRefCounter007 end.");
1871 }
1872 
1873 /*
1874  * @tc.name: testRefCounter008
1875  * @tc.desc: Test for IsLifeTimeExtended, ExtendObjectLifetime
1876  */
BENCHMARK_F(BenchmarkRefbaseTest,testRefCounter008)1877 BENCHMARK_F(BenchmarkRefbaseTest, testRefCounter008)(benchmark::State& state)
1878 {
1879     BENCHMARK_LOGD("RefbaseTest testRefCounter008 start.");
1880     while (state.KeepRunning()) {
1881         RefCounter *refs = new RefCounter();
1882         AssertFalse(refs->IsLifeTimeExtended(), "refs->IsLifeTimeExtended() did not return false", state);
1883         refs->ExtendObjectLifetime();
1884         AssertTrue(refs->IsLifeTimeExtended(), "refs->IsLifeTimeExtended did not return true", state);
1885         delete refs;
1886     }
1887     BENCHMARK_LOGD("RefbaseTest testRefCounter008 end.");
1888 }
1889 }  // namespace
1890 }  // namespace OHOS
1891 // Run the benchmark
1892 BENCHMARK_MAIN();
1893