diff options
author | Justin Hou <justinhou@google.com> | 2020-08-20 10:28:53 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-08-20 10:28:53 +0000 |
commit | 054cdc91eab990221623c3d529da9b671118ebbe (patch) | |
tree | a4c62b22c29151a3984a64c8e66b5d50405a4390 | |
parent | 862bb35043357c1ba5ce3b3e81ba320166a2de56 (diff) | |
parent | f79e434d664217e9273e71dc0bf5ca79dfb8f005 (diff) | |
download | camera-android11-qpr2-release.tar.gz |
camera: Add error handling prevent native crash am: f79e434d66android-11.0.0_r37android-11.0.0_r36android-11.0.0_r35android-11.0.0_r34android-11.0.0_r33android-11.0.0_r32android-11.0.0_r30android11-qpr2-releaseandroid11-qpr1-c-release
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/google/camera/+/12406778
Change-Id: I32bfe63b5c8939a77399d5e6b2cf92091731814a
-rw-r--r-- | common/hal/hidl_service/hidl_profiler.cc | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/common/hal/hidl_service/hidl_profiler.cc b/common/hal/hidl_service/hidl_profiler.cc index ff7b563..3c7e40d 100644 --- a/common/hal/hidl_service/hidl_profiler.cc +++ b/common/hal/hidl_service/hidl_profiler.cc @@ -36,13 +36,17 @@ struct HidlProfiler { mode |= google::camera_common::Profiler::SetPropFlag::kStopWatch; } profiler = google::camera_common::Profiler::Create(mode); - profiler->SetDumpFilePrefix( - "/data/vendor/camera/profiler/hidl_open_close_"); - profiler->Start("Overall", 0); + if (profiler != nullptr) { + profiler->SetDumpFilePrefix( + "/data/vendor/camera/profiler/hidl_open_close_"); + profiler->Start("Overall", 0); + } } ~HidlProfiler() { - profiler->End("Overall", 0); + if (profiler != nullptr) { + profiler->End("Overall", 0); + } } std::shared_ptr<google::camera_common::Profiler> profiler = nullptr; @@ -55,14 +59,15 @@ struct HidlProfiler { std::unique_ptr<HidlProfiler> gHidlProfiler = nullptr; void StartNewConnector() { - if (gHidlProfiler != nullptr) { + if (gHidlProfiler != nullptr && gHidlProfiler->profiler != nullptr) { gHidlProfiler->profiler->Start("<-- IDLE -->", ++gHidlProfiler->connector_counter); } } void EndConnector() { - if (gHidlProfiler != nullptr && gHidlProfiler->connector_counter != 0) { + if (gHidlProfiler != nullptr && gHidlProfiler->profiler != nullptr && + gHidlProfiler->connector_counter != 0) { gHidlProfiler->profiler->End("<-- IDLE -->", gHidlProfiler->connector_counter); } @@ -76,6 +81,11 @@ void EndProfiler() { std::unique_ptr<HidlProfilerItem> OnCameraOpen() { gHidlProfiler = std::make_unique<HidlProfiler>(); + if (gHidlProfiler == nullptr || gHidlProfiler->profiler == nullptr) { + ALOGE("%s: gHidlProfiler or profiler is nullptr.", __FUNCTION__); + return nullptr; + } + gHidlProfiler->has_camera_open = true; gHidlProfiler->profiler->SetUseCase("Open Camera"); @@ -88,6 +98,11 @@ std::unique_ptr<HidlProfilerItem> OnCameraFlush() { if (gHidlProfiler == nullptr) { gHidlProfiler = std::make_unique<HidlProfiler>(); } + + if (gHidlProfiler == nullptr || gHidlProfiler->profiler == nullptr) { + ALOGE("%s: gHidlProfiler or profiler is nullptr.", __FUNCTION__); + return nullptr; + } gHidlProfiler->profiler->SetUseCase("Flush Camera"); return std::make_unique<HidlProfilerItem>(gHidlProfiler->profiler, "Flush", StartNewConnector, @@ -99,6 +114,12 @@ std::unique_ptr<HidlProfilerItem> OnCameraClose() { if (gHidlProfiler == nullptr) { gHidlProfiler = std::make_unique<HidlProfiler>(); } + + if (gHidlProfiler == nullptr || gHidlProfiler->profiler == nullptr) { + ALOGE("%s: gHidlProfiler or profiler is nullptr.", __FUNCTION__); + return nullptr; + } + gHidlProfiler->profiler->SetUseCase("Close Camera"); return std::make_unique<HidlProfilerItem>(gHidlProfiler->profiler, "Close", EndProfiler); @@ -109,6 +130,12 @@ std::unique_ptr<HidlProfilerItem> OnCameraStreamConfigure() { if (gHidlProfiler == nullptr) { gHidlProfiler = std::make_unique<HidlProfiler>(); } + + if (gHidlProfiler == nullptr || gHidlProfiler->profiler == nullptr) { + ALOGE("%s: gHidlProfiler or profiler is nullptr.", __FUNCTION__); + return nullptr; + } + if (!gHidlProfiler->has_camera_open) { gHidlProfiler->profiler->SetUseCase("Reconfigure Stream"); } @@ -120,7 +147,7 @@ std::unique_ptr<HidlProfilerItem> OnCameraStreamConfigure() { void OnFirstFrameRequest() { EndConnector(); - if (gHidlProfiler != nullptr) { + if (gHidlProfiler != nullptr && gHidlProfiler->profiler != nullptr) { gHidlProfiler->profiler->Start( "First frame", google::camera_common::Profiler::kInvalidRequestId); gHidlProfiler->profiler->Start( @@ -129,7 +156,7 @@ void OnFirstFrameRequest() { } void OnFirstFrameResult() { - if (gHidlProfiler != nullptr) { + if (gHidlProfiler != nullptr && gHidlProfiler->profiler != nullptr) { gHidlProfiler->profiler->End( "First frame", google::camera_common::Profiler::kInvalidRequestId); gHidlProfiler->profiler->End( |