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