1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include <shared/test_success_marker.h> 18 19 #include <chre/re.h> 20 #include <shared/send_message.h> 21 22 namespace nanoapp_testing { 23 TestSuccessMarker(uint32_t numStages)24TestSuccessMarker::TestSuccessMarker(uint32_t numStages) { 25 if (numStages > 32) { 26 sendFatalFailureToHost( 27 "Total number of stage should be less than 33, got %d", &numStages); 28 } 29 mAllFinished = (UINT64_C(1) << numStages) - 1; 30 } 31 markStage(uint32_t stage)32void TestSuccessMarker::markStage(uint32_t stage) { 33 uint32_t finishedBit = (1 << stage); 34 if ((mAllFinished & finishedBit) == 0) { 35 sendFatalFailureToHost("markSuccess invalid stage", &stage); 36 } 37 if ((mFinishedBitmask & finishedBit) == 0) { 38 chreLog(CHRE_LOG_DEBUG, "Stage %d succeeded", stage); 39 mFinishedBitmask |= finishedBit; 40 } 41 } 42 isAllFinished()43bool TestSuccessMarker::isAllFinished() { 44 return (mFinishedBitmask == mAllFinished); 45 } 46 isStageMarked(uint32_t stage)47bool TestSuccessMarker::isStageMarked(uint32_t stage) { 48 bool marked = false; 49 if (stage <= 32) { 50 uint32_t finishedBit = (1 << stage); 51 marked = ((mFinishedBitmask & finishedBit) != 0); 52 } 53 return marked; 54 } 55 markStageAndSuccessOnFinish(uint32_t stage)56void TestSuccessMarker::markStageAndSuccessOnFinish(uint32_t stage) { 57 if (!isStageMarked(stage)) { 58 markStage(stage); 59 if (isAllFinished()) { 60 sendSuccessToHost(); 61 } 62 } 63 } 64 65 } // namespace nanoapp_testing 66