Files
hardware_interfaces/camera/common/default/SimpleThread.cpp
Avichal Rakesh 0d2d8a4b4d Camera: Move common-helper target out of HIDL directory
This CL moves the common helper classes from inside the HIDL directory
and refactors the HIDL-esque namespaces to android style namespaces.

To preserve compatibility, the header files export the new symbols under
old namespace and the old build module exports symbols from the new
build module. This refactor is transparent to the codebase.

Also ran clangformat to appease the repohook gods.

Bug: 219974678
Test: Existing VTS tests pass on Cuttlefish
Change-Id: I8c3160497c1e2fe7a0a7155641f0e1f5e47ec32e
2022-12-01 05:09:21 -08:00

65 lines
1.8 KiB
C++

/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "SimpleThread.h"
namespace android {
namespace hardware {
namespace camera {
namespace common {
namespace helper {
SimpleThread::SimpleThread() : mDone(true), mThread() {}
SimpleThread::~SimpleThread() {
// Safe to call requestExitAndWait() from the destructor because requestExitAndWait() ensures
// that the thread is joinable before joining on it. This is different from how
// android::Thread worked.
requestExitAndWait();
}
void SimpleThread::run() {
requestExitAndWait(); // Exit current execution, if any.
// start thread
mDone.store(false, std::memory_order_release);
mThread = std::thread(&SimpleThread::runLoop, this);
}
void SimpleThread::requestExitAndWait() {
// Signal thread to stop
mDone.store(true, std::memory_order_release);
// Wait for thread to exit if needed. This should happen in no more than one iteration of
// threadLoop
if (mThread.joinable()) {
mThread.join();
}
mThread = std::thread();
}
void SimpleThread::runLoop() {
while (!exitPending()) {
if (!threadLoop()) {
break;
}
}
}
} // namespace helper
} // namespace common
} // namespace camera
} // namespace hardware
} // namespace android