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