drm_hwcomposer: CI: Increase coverage

Add the following files to the build:
backend/BackendClient.cpp
backend/Backend.cpp
backend/BackendManager.cpp
backend/BackendRCarDu.cpp
bufferinfo/legacy/BufferInfoImagination.cpp
bufferinfo/legacy/BufferInfoLibdrm.cpp
bufferinfo/legacy/BufferInfoMaliHisi.cpp
bufferinfo/legacy/BufferInfoMaliMediatek.cpp
bufferinfo/legacy/BufferInfoMaliMeson.cpp
bufferinfo/legacy/BufferInfoMinigbm.cpp
compositor/DrmDisplayComposition.cpp
compositor/DrmDisplayCompositor.cpp
compositor/Planner.cpp
drm/DrmGenericImporter.cpp
DrmHwcTwo.cpp
drm/ResourceManager.cpp
drm/VSyncWorker.cpp
tests/worker_test.cpp
utils/autolock.cpp

Files 'bufferinfo/BufferInfoMapperMetadata.cpp' and 'utils/hwcutils.cpp' require
a lot of additional headers, therefore move them out of the scope of this commit.

'utils/gralloc.h' isn't planned to use in pure-linux builds, therefore remove
it from 'utils' and put it into '.ci/android_headers/hardware/'

Fix minor tidy fails.

Fix linux build fails (missing includes) due to differences between libc and
bionic.

Comment-out some sections in 'tests/test_include' which aren't used by drm_hwc
but causing build failures for CI due to missing dependencies.

Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
Reviewed-by: Matvii Zorin <matvii.zorin@globallogic.com>
diff --git a/.ci/.common.sh b/.ci/.common.sh
index fce6eee..93f7f95 100644
--- a/.ci/.common.sh
+++ b/.ci/.common.sh
@@ -1,21 +1,42 @@
-INCLUDE_DIRS="-I. -I../libdrm/include/drm -Iinclude -I/usr/include/libdrm -I./.ci/android_headers"
+INCLUDE_DIRS="-I. -I../libdrm/include/drm -Iinclude -I/usr/include/libdrm -I./.ci/android_headers -I./tests/test_include"
 
 CLANG="clang++-11"
 CLANG_TIDY="clang-tidy-11"
 
-CXXARGS="-fPIC -Wall -Werror -DPLATFORM_SDK_VERSION=30 -Wsign-promo -Wimplicit-fallthrough"
+CXXARGS="-fPIC -Wall -Werror -DPLATFORM_SDK_VERSION=30 -D__ANDROID_API__=30 -Wsign-promo -Wimplicit-fallthrough"
 CXXARGS+=" -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -Wno-gnu-include-next "
 CXXARGS+=" -fvisibility-inlines-hidden -std=gnu++17 -DHWC2_USE_CPP11 -DHWC2_INCLUDE_STRINGIFICATION -fexceptions -fno-rtti"
 
 BUILD_FILES=(
+backend/BackendClient.cpp
+backend/Backend.cpp
+backend/BackendManager.cpp
+backend/BackendRCarDu.cpp
 bufferinfo/BufferInfoGetter.cpp
+#bufferinfo/BufferInfoMapperMetadata.cpp
+bufferinfo/legacy/BufferInfoImagination.cpp
+bufferinfo/legacy/BufferInfoLibdrm.cpp
+bufferinfo/legacy/BufferInfoMaliHisi.cpp
+bufferinfo/legacy/BufferInfoMaliMediatek.cpp
+bufferinfo/legacy/BufferInfoMaliMeson.cpp
+bufferinfo/legacy/BufferInfoMinigbm.cpp
+compositor/DrmDisplayComposition.cpp
+compositor/DrmDisplayCompositor.cpp
+compositor/Planner.cpp
 drm/DrmConnector.cpp
 drm/DrmCrtc.cpp
 drm/DrmDevice.cpp
 drm/DrmEncoder.cpp
 drm/DrmEventListener.cpp
+drm/DrmGenericImporter.cpp
 drm/DrmMode.cpp
 drm/DrmPlane.cpp
 drm/DrmProperty.cpp
+DrmHwcTwo.cpp
+drm/ResourceManager.cpp
+drm/VSyncWorker.cpp
+tests/worker_test.cpp
+utils/autolock.cpp
+#utils/hwcutils.cpp
 utils/Worker.cpp
 )
diff --git a/.ci/.gitlab-ci-clang-tidy-coarse.sh b/.ci/.gitlab-ci-clang-tidy-coarse.sh
index 4ecf19e..de0c024 100755
--- a/.ci/.gitlab-ci-clang-tidy-coarse.sh
+++ b/.ci/.gitlab-ci-clang-tidy-coarse.sh
@@ -35,5 +35,5 @@
 
 for source in "${TIDY_FILES[@]}"
 do
-    $CLANG_TIDY $source --checks=$TIDY_COARSE_CHECKS -- -x c++ $INCLUDE_DIRS
+    $CLANG_TIDY $source --checks=$TIDY_COARSE_CHECKS -- -x c++ $INCLUDE_DIRS $CXXARGS
 done
diff --git a/.ci/.gitlab-ci-clang-tidy-fine.sh b/.ci/.gitlab-ci-clang-tidy-fine.sh
index fdc0883..644f621 100755
--- a/.ci/.gitlab-ci-clang-tidy-fine.sh
+++ b/.ci/.gitlab-ci-clang-tidy-fine.sh
@@ -3,7 +3,6 @@
 . ./.ci/.common.sh
 
 TIDY_FILES=(
-utils/gralloc.h
 utils/log.h
 utils/properties.h
 )
@@ -12,5 +11,5 @@
 
 for source in "${TIDY_FILES[@]}"
 do
-    $CLANG_TIDY $source -- -x c++ $INCLUDE_DIRS
+    $CLANG_TIDY $source -- -x c++ $INCLUDE_DIRS $CXXARGS
 done
diff --git a/.ci/android_headers/hardware/gralloc.h b/.ci/android_headers/hardware/gralloc.h
index 1193b1f..260140e 100644
--- a/.ci/android_headers/hardware/gralloc.h
+++ b/.ci/android_headers/hardware/gralloc.h
@@ -29,7 +29,9 @@
 #include <cutils/native_handle.h>
 
 #include <hardware/hardware.h>
+#if 0 /* Header below is not used by drm_hwcomposer */
 #include <hardware/fb.h>
+#endif
 
 __BEGIN_DECLS
 
diff --git a/.ci/android_headers/hardware/hwcomposer2.h b/.ci/android_headers/hardware/hwcomposer2.h
index a10f526..df5670f 100644
--- a/.ci/android_headers/hardware/hwcomposer2.h
+++ b/.ci/android_headers/hardware/hwcomposer2.h
@@ -24,6 +24,13 @@
 
 #include "hwcomposer_defs.h"
 
+/* Missing in glibc, pull from BIONIC */
+#if defined(__cplusplus)
+#define __BIONIC_CAST(_k,_t,_v) (_k<_t>(_v))
+#else
+#define __BIONIC_CAST(_k,_t,_v) ((_t) (_v))
+#endif
+
 __BEGIN_DECLS
 
 /*
diff --git a/.ci/android_headers/ndk/sync.h b/.ci/android_headers/ndk/sync.h
index dcc35f3..2ca389b 100644
--- a/.ci/android_headers/ndk/sync.h
+++ b/.ci/android_headers/ndk/sync.h
@@ -67,7 +67,7 @@
  *
  * Available since API level 26.
  */
-int32_t sync_merge(const char* name, int32_t fd1, int32_t fd2) __INTRODUCED_IN(26);
+int32_t sync_merge(const char* name, int32_t fd1, int32_t fd2) /* __INTRODUCED_IN(26) */;
 
 /**
  * Retrieve detailed information about a sync file and its fences.
@@ -76,7 +76,7 @@
  *
  * Available since API level 26.
  */
-struct sync_file_info* sync_file_info(int32_t fd) __INTRODUCED_IN(26);
+struct sync_file_info* sync_file_info(int32_t fd) /* __INTRODUCED_IN(26) */;
 
 /**
  * Get the array of fence infos from the sync file's info.
@@ -100,7 +100,7 @@
  *
  * Available since API level 26.
  */
-void sync_file_info_free(struct sync_file_info* info) __INTRODUCED_IN(26);
+void sync_file_info_free(struct sync_file_info* info) /* __INTRODUCED_IN(26) */;
 
 #endif /* __ANDROID_API__ >= 26 */
 
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7fd7367..04eb6c5 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,7 +2,7 @@
 
 before_script:
   - apt-get --quiet update --yes >/dev/null
-  - apt-get --quiet install --yes clang-11 clang-tidy-11 clang-format-11 git libdrm-dev blueprint-tools >/dev/null
+  - apt-get --quiet install --yes clang-11 clang-tidy-11 clang-format-11 git libdrm-dev blueprint-tools libgtest-dev >/dev/null
 
 stages:
   - build
diff --git a/DrmHwcTwo.cpp b/DrmHwcTwo.cpp
index c2de931..056b167 100644
--- a/DrmHwcTwo.cpp
+++ b/DrmHwcTwo.cpp
@@ -19,18 +19,20 @@
 
 #include "DrmHwcTwo.h"
 
-#include <cutils/properties.h>
 #include <hardware/hardware.h>
 #include <hardware/hwcomposer2.h>
-#include <log/log.h>
 #include <sync/sync.h>
 
 #include <cinttypes>
+#include <iostream>
+#include <sstream>
 #include <string>
 
 #include "backend/BackendManager.h"
 #include "bufferinfo/BufferInfoGetter.h"
 #include "compositor/DrmDisplayComposition.h"
+#include "utils/log.h"
+#include "utils/properties.h"
 
 namespace android {
 
@@ -59,8 +61,8 @@
     ALOGE("Failed to get crtc for display %d", static_cast<int>(displ));
     return HWC2::Error::BadDisplay;
   }
-  std::vector<DrmPlane *> display_planes;
-  for (auto &plane : drm->planes()) {
+  auto display_planes = std::vector<DrmPlane *>();
+  for (const auto &plane : drm->planes()) {
     if (plane->GetCrtcSupported(*crtc))
       display_planes.push_back(plane.get());
   }
@@ -84,8 +86,8 @@
     }
   }
 
-  auto &drm_devices = resource_manager_.getDrmDevices();
-  for (auto &device : drm_devices) {
+  const auto &drm_devices = resource_manager_.getDrmDevices();
+  for (const auto &device : drm_devices) {
     // NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
     device->RegisterHotplugHandler(new DrmHotplugHandler(this, device.get()));
   }
@@ -120,35 +122,33 @@
     return "No stats yet";
   double ratio = 1.0 - double(delta.gpu_pixops_) / double(delta.total_pixops_);
 
-  return (std::stringstream()
-          << " Total frames count: " << delta.total_frames_ << "\n"
-          << " Failed to test commit frames: " << delta.failed_kms_validate_
-          << "\n"
-          << " Failed to commit frames: " << delta.failed_kms_present_ << "\n"
-          << ((delta.failed_kms_present_ > 0)
-                  ? " !!! Internal failure, FIX it please\n"
-                  : "")
-          << " Flattened frames: " << delta.frames_flattened_ << "\n"
-          << " Pixel operations (free units)"
-          << " : [TOTAL: " << delta.total_pixops_
-          << " / GPU: " << delta.gpu_pixops_ << "]\n"
-          << " Composition efficiency: " << ratio)
-      .str();
+  std::stringstream ss;
+  ss << " Total frames count: " << delta.total_frames_ << "\n"
+     << " Failed to test commit frames: " << delta.failed_kms_validate_ << "\n"
+     << " Failed to commit frames: " << delta.failed_kms_present_ << "\n"
+     << ((delta.failed_kms_present_ > 0)
+             ? " !!! Internal failure, FIX it please\n"
+             : "")
+     << " Flattened frames: " << delta.frames_flattened_ << "\n"
+     << " Pixel operations (free units)"
+     << " : [TOTAL: " << delta.total_pixops_ << " / GPU: " << delta.gpu_pixops_
+     << "]\n"
+     << " Composition efficiency: " << ratio;
+
+  return ss.str();
 }
 
 std::string DrmHwcTwo::HwcDisplay::Dump() {
-  auto out = (std::stringstream()
-              << "- Display on: " << connector_->name() << "\n"
-              << "  Flattening state: " << compositor_.GetFlatteningState()
-              << "\n"
-              << "Statistics since system boot:\n"
-              << DumpDelta(total_stats_) << "\n\n"
-              << "Statistics since last dumpsys request:\n"
-              << DumpDelta(total_stats_.minus(prev_stats_)) << "\n\n")
-                 .str();
+  std::stringstream ss;
+  ss << "- Display on: " << connector_->name() << "\n"
+     << "  Flattening state: " << compositor_.GetFlatteningState() << "\n"
+     << "Statistics since system boot:\n"
+     << DumpDelta(total_stats_) << "\n\n"
+     << "Statistics since last dumpsys request:\n"
+     << DumpDelta(total_stats_.minus(prev_stats_)) << "\n\n";
 
   memcpy(&prev_stats_, &total_stats_, sizeof(Stats));
-  return out;
+  return ss.str();
 }
 
 void DrmHwcTwo::Dump(uint32_t *outSize, char *outBuffer) {
@@ -185,8 +185,8 @@
   switch (static_cast<HWC2::Callback>(descriptor)) {
     case HWC2::Callback::Hotplug: {
       SetHotplugCallback(data, function);
-      auto &drm_devices = resource_manager_.getDrmDevices();
-      for (auto &device : drm_devices)
+      const auto &drm_devices = resource_manager_.getDrmDevices();
+      for (const auto &device : drm_devices)
         HandleInitialHotplugState(device.get());
       break;
     }
@@ -1187,7 +1187,7 @@
 }
 
 void DrmHwcTwo::HandleInitialHotplugState(DrmDevice *drmDevice) {
-  for (auto &conn : drmDevice->connectors()) {
+  for (const auto &conn : drmDevice->connectors()) {
     if (conn->state() != DRM_MODE_CONNECTED)
       continue;
     HandleDisplayHotplug(conn->display(), conn->state());
@@ -1195,7 +1195,7 @@
 }
 
 void DrmHwcTwo::DrmHotplugHandler::HandleEvent(uint64_t timestamp_us) {
-  for (auto &conn : drm_->connectors()) {
+  for (const auto &conn : drm_->connectors()) {
     drmModeConnection old_state = conn->state();
     drmModeConnection cur_state = conn->UpdateModes()
                                       ? DRM_MODE_UNKNOWNCONNECTION
diff --git a/backend/Backend.cpp b/backend/Backend.cpp
index 3505385..9e9e2b9 100644
--- a/backend/Backend.cpp
+++ b/backend/Backend.cpp
@@ -16,6 +16,8 @@
 
 #include "Backend.h"
 
+#include <climits>
+
 #include "BackendManager.h"
 #include "bufferinfo/BufferInfoGetter.h"
 
@@ -117,7 +119,7 @@
   int client_start = -1;
   size_t client_size = 0;
 
-  for (auto &[z_order, layer] : z_map) {
+  for (const auto &[z_order, layer] : z_map) {
     if (IsClientLayer(display, layer)) {
       if (client_start < 0)
         client_start = (int)z_order;
@@ -137,7 +139,9 @@
           display->resource_manager()->ForcedScalingWithGpu());
 }
 
-// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
+// clang-format off
+// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables, cert-err58-cpp)
 REGISTER_BACKEND("generic", Backend);
+// clang-format on
 
 }  // namespace android
diff --git a/backend/BackendClient.cpp b/backend/BackendClient.cpp
index bef536a..49963b8 100644
--- a/backend/BackendClient.cpp
+++ b/backend/BackendClient.cpp
@@ -30,7 +30,9 @@
   return HWC2::Error::HasChanges;
 }
 
-// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
+// clang-format off
+// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables, cert-err58-cpp)
 REGISTER_BACKEND("client", BackendClient);
+// clang-format on
 
 }  // namespace android
diff --git a/backend/BackendManager.cpp b/backend/BackendManager.cpp
index a346d46..7b89761 100644
--- a/backend/BackendManager.cpp
+++ b/backend/BackendManager.cpp
@@ -18,11 +18,12 @@
 
 #include "BackendManager.h"
 
-#include <cutils/properties.h>
-#include <log/log.h>
+#include "utils/log.h"
+#include "utils/properties.h"
 
 namespace android {
 
+// NOLINTNEXTLINE(cert-err58-cpp)
 const std::vector<std::string> BackendManager::kClientDevices = {
     "kirin",
     "mediatek-drm",
diff --git a/backend/BackendRCarDu.cpp b/backend/BackendRCarDu.cpp
index 6585406..b012797 100644
--- a/backend/BackendRCarDu.cpp
+++ b/backend/BackendRCarDu.cpp
@@ -40,7 +40,9 @@
   return Backend::IsClientLayer(display, layer);
 }
 
-// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
+// clang-format off
+// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables, cert-err58-cpp)
 REGISTER_BACKEND("rcar-du", BackendRCarDu);
+// clang-format on
 
 }  // namespace android
\ No newline at end of file
diff --git a/bufferinfo/BufferInfoGetter.h b/bufferinfo/BufferInfoGetter.h
index c1dc74a..60ca985 100644
--- a/bufferinfo/BufferInfoGetter.h
+++ b/bufferinfo/BufferInfoGetter.h
@@ -18,10 +18,10 @@
 #define ANDROID_BUFFERINFOGETTER_H_
 
 #include <drm/drm_fourcc.h>
+#include <hardware/gralloc.h>
 
 #include "drm/DrmDevice.h"
 #include "drmhwcgralloc.h"
-#include "utils/gralloc.h"
 
 #ifndef DRM_FORMAT_INVALID
 #define DRM_FORMAT_INVALID 0
diff --git a/bufferinfo/BufferInfoMapperMetadata.cpp b/bufferinfo/BufferInfoMapperMetadata.cpp
index 516c7e1..23a9072 100644
--- a/bufferinfo/BufferInfoMapperMetadata.cpp
+++ b/bufferinfo/BufferInfoMapperMetadata.cpp
@@ -21,13 +21,14 @@
 #include "BufferInfoMapperMetadata.h"
 
 #include <drm/drm_fourcc.h>
-#include <log/log.h>
 #include <ui/GraphicBufferMapper.h>
 #include <xf86drm.h>
 #include <xf86drmMode.h>
 
 #include <cinttypes>
 
+#include "utils/log.h"
+
 namespace android {
 
 BufferInfoGetter *BufferInfoMapperMetadata::CreateInstance() {
diff --git a/bufferinfo/legacy/BufferInfoImagination.cpp b/bufferinfo/legacy/BufferInfoImagination.cpp
index b3c1d33..d646072 100644
--- a/bufferinfo/legacy/BufferInfoImagination.cpp
+++ b/bufferinfo/legacy/BufferInfoImagination.cpp
@@ -18,10 +18,10 @@
 
 #include "BufferInfoImagination.h"
 
-#include <log/log.h>
 #include <xf86drm.h>
 
 #include "img_gralloc1_public.h"
+#include "utils/log.h"
 
 namespace android {
 
diff --git a/bufferinfo/legacy/BufferInfoLibdrm.cpp b/bufferinfo/legacy/BufferInfoLibdrm.cpp
index 1953e36..52f792f 100644
--- a/bufferinfo/legacy/BufferInfoLibdrm.cpp
+++ b/bufferinfo/legacy/BufferInfoLibdrm.cpp
@@ -18,13 +18,14 @@
 
 #include "BufferInfoLibdrm.h"
 
-#include <cutils/properties.h>
 #include <gralloc_handle.h>
 #include <hardware/gralloc.h>
-#include <log/log.h>
 #include <xf86drm.h>
 #include <xf86drmMode.h>
 
+#include "utils/log.h"
+#include "utils/properties.h"
+
 namespace android {
 
 LEGACY_BUFFER_INFO_GETTER(BufferInfoLibdrm);
diff --git a/bufferinfo/legacy/BufferInfoMaliHisi.cpp b/bufferinfo/legacy/BufferInfoMaliHisi.cpp
index ddb12ab..5fc413a 100644
--- a/bufferinfo/legacy/BufferInfoMaliHisi.cpp
+++ b/bufferinfo/legacy/BufferInfoMaliHisi.cpp
@@ -18,13 +18,13 @@
 
 #include "BufferInfoMaliHisi.h"
 
-#include <log/log.h>
 #include <xf86drm.h>
 #include <xf86drmMode.h>
 
 #include <cinttypes>
 
 #include "gralloc_priv.h"
+#include "utils/log.h"
 
 #define MALI_ALIGN(value, base) (((value) + ((base)-1)) & ~((base)-1))
 
@@ -70,7 +70,7 @@
                                       hwc_drm_bo_t *bo) {
   bool is_rgb = false;
 
-  auto *hnd = (private_handle_t const *)handle;
+  const auto *hnd = (private_handle_t const *)handle;
   if (!hnd)
     return -EINVAL;
 
diff --git a/bufferinfo/legacy/BufferInfoMaliMediatek.cpp b/bufferinfo/legacy/BufferInfoMaliMediatek.cpp
index f6e0ac5..7e6f3a8 100644
--- a/bufferinfo/legacy/BufferInfoMaliMediatek.cpp
+++ b/bufferinfo/legacy/BufferInfoMaliMediatek.cpp
@@ -19,7 +19,6 @@
 #include "BufferInfoMaliMediatek.h"
 
 #include <hardware/gralloc.h>
-#include <log/log.h>
 #include <stdatomic.h>
 #include <xf86drm.h>
 #include <xf86drmMode.h>
@@ -27,6 +26,7 @@
 #include <cinttypes>
 
 #include "gralloc_priv.h"
+#include "utils/log.h"
 
 namespace android {
 
@@ -34,7 +34,7 @@
 
 int BufferInfoMaliMediatek::ConvertBoInfo(buffer_handle_t handle,
                                           hwc_drm_bo_t *bo) {
-  auto *hnd = (private_handle_t const *)handle;
+  const auto *hnd = (private_handle_t const *)handle;
   if (!hnd)
     return -EINVAL;
 
diff --git a/bufferinfo/legacy/BufferInfoMaliMeson.cpp b/bufferinfo/legacy/BufferInfoMaliMeson.cpp
index ad10203..9daf542 100644
--- a/bufferinfo/legacy/BufferInfoMaliMeson.cpp
+++ b/bufferinfo/legacy/BufferInfoMaliMeson.cpp
@@ -18,13 +18,13 @@
 
 #include "BufferInfoMaliMeson.h"
 
-#include <log/log.h>
 #include <xf86drm.h>
 #include <xf86drmMode.h>
 
 #include <cinttypes>
 
 #include "gralloc_priv.h"
+#include "utils/log.h"
 
 namespace android {
 
@@ -63,7 +63,7 @@
 
 int BufferInfoMaliMeson::ConvertBoInfo(buffer_handle_t handle,
                                        hwc_drm_bo_t *bo) {
-  auto *hnd = (private_handle_t const *)handle;
+  const auto *hnd = (private_handle_t const *)handle;
   if (!hnd)
     return -EINVAL;
 
diff --git a/bufferinfo/legacy/BufferInfoMinigbm.cpp b/bufferinfo/legacy/BufferInfoMinigbm.cpp
index f5e661f..d030dff 100644
--- a/bufferinfo/legacy/BufferInfoMinigbm.cpp
+++ b/bufferinfo/legacy/BufferInfoMinigbm.cpp
@@ -18,11 +18,11 @@
 
 #include "BufferInfoMinigbm.h"
 
-#include <log/log.h>
 #include <xf86drm.h>
 #include <xf86drmMode.h>
 
 #include "cros_gralloc_handle.h"
+#include "utils/log.h"
 
 #define DRM_FORMAT_YVU420_ANDROID fourcc_code('9', '9', '9', '7')
 
diff --git a/compositor/DrmDisplayComposition.cpp b/compositor/DrmDisplayComposition.cpp
index ef151a1..31d8693 100644
--- a/compositor/DrmDisplayComposition.cpp
+++ b/compositor/DrmDisplayComposition.cpp
@@ -18,7 +18,6 @@
 
 #include "DrmDisplayComposition.h"
 
-#include <log/log.h>
 #include <sync/sync.h>
 #include <xf86drmMode.h>
 
@@ -29,6 +28,7 @@
 #include "DrmDisplayCompositor.h"
 #include "Planner.h"
 #include "drm/DrmDevice.h"
+#include "utils/log.h"
 
 namespace android {
 
diff --git a/compositor/DrmDisplayCompositor.cpp b/compositor/DrmDisplayCompositor.cpp
index 2cc0da5..fd60f97 100644
--- a/compositor/DrmDisplayCompositor.cpp
+++ b/compositor/DrmDisplayCompositor.cpp
@@ -20,7 +20,6 @@
 #include "DrmDisplayCompositor.h"
 
 #include <drm/drm_mode.h>
-#include <log/log.h>
 #include <pthread.h>
 #include <sched.h>
 #include <sync/sync.h>
@@ -36,6 +35,7 @@
 #include "drm/DrmDevice.h"
 #include "drm/DrmPlane.h"
 #include "utils/autolock.h"
+#include "utils/log.h"
 
 namespace android {
 
diff --git a/compositor/DrmDisplayCompositor.h b/compositor/DrmDisplayCompositor.h
index 8660a6d..9ce91b7 100644
--- a/compositor/DrmDisplayCompositor.h
+++ b/compositor/DrmDisplayCompositor.h
@@ -21,6 +21,7 @@
 #include <hardware/hwcomposer.h>
 #include <pthread.h>
 
+#include <functional>
 #include <memory>
 #include <sstream>
 #include <tuple>
diff --git a/compositor/Planner.cpp b/compositor/Planner.cpp
index b6f10d2..58db2ea 100644
--- a/compositor/Planner.cpp
+++ b/compositor/Planner.cpp
@@ -18,9 +18,10 @@
 
 #include "Planner.h"
 
-#include <log/log.h>
+#include <algorithm>
 
 #include "drm/DrmDevice.h"
+#include "utils/log.h"
 
 namespace android {
 
diff --git a/compositor/Planner.h b/compositor/Planner.h
index 09034ff..5d448a4 100644
--- a/compositor/Planner.h
+++ b/compositor/Planner.h
@@ -21,6 +21,7 @@
 #include <hardware/hwcomposer.h>
 
 #include <map>
+#include <memory>
 #include <vector>
 
 #include "compositor/DrmDisplayComposition.h"
@@ -99,7 +100,7 @@
       std::vector<DrmPlane *> *overlay_planes);
 
   template <typename T, typename... A>
-  void AddStage(A &&... args) {
+  void AddStage(A &&...args) {
     stages_.emplace_back(
         std::unique_ptr<PlanStage>(new T(std::forward(args)...)));
   }
diff --git a/drm/DrmGenericImporter.cpp b/drm/DrmGenericImporter.cpp
index 893eb8d..0cbe601 100644
--- a/drm/DrmGenericImporter.cpp
+++ b/drm/DrmGenericImporter.cpp
@@ -18,15 +18,16 @@
 
 #include "DrmGenericImporter.h"
 
-#include <cutils/properties.h>
 #include <gralloc_handle.h>
 #include <hardware/gralloc.h>
-#include <log/log.h>
 #include <xf86drm.h>
 #include <xf86drmMode.h>
 
 #include <cinttypes>
 
+#include "utils/log.h"
+#include "utils/properties.h"
+
 namespace android {
 
 DrmGenericImporter::DrmGenericImporter(DrmDevice *drm) : drm_(drm) {
diff --git a/drm/ResourceManager.cpp b/drm/ResourceManager.cpp
index 50c33aa..f8e9cab 100644
--- a/drm/ResourceManager.cpp
+++ b/drm/ResourceManager.cpp
@@ -18,13 +18,14 @@
 
 #include "ResourceManager.h"
 
-#include <cutils/properties.h>
+#include <fcntl.h>
 #include <sys/stat.h>
 
 #include <sstream>
 
 #include "bufferinfo/BufferInfoGetter.h"
 #include "utils/log.h"
+#include "utils/properties.h"
 
 namespace android {
 
@@ -115,7 +116,7 @@
   if (fd < 0)
     return false;
 
-  auto res = drmModeGetResources(fd);
+  auto *res = drmModeGetResources(fd);
   if (!res) {
     close(fd);
     return false;
diff --git a/drm/VSyncWorker.cpp b/drm/VSyncWorker.cpp
index e9f4f9c..25eeeab 100644
--- a/drm/VSyncWorker.cpp
+++ b/drm/VSyncWorker.cpp
@@ -22,6 +22,7 @@
 #include <xf86drmMode.h>
 
 #include <cstdlib>
+#include <cstring>
 #include <ctime>
 
 #include "utils/log.h"
diff --git a/drm/VSyncWorker.h b/drm/VSyncWorker.h
index 76f2854..b43918c 100644
--- a/drm/VSyncWorker.h
+++ b/drm/VSyncWorker.h
@@ -22,6 +22,7 @@
 #include <hardware/hwcomposer2.h>
 #include <stdint.h>
 
+#include <atomic>
 #include <map>
 
 #include "DrmDevice.h"
diff --git a/tests/test_include/cros_gralloc_handle.h b/tests/test_include/cros_gralloc_handle.h
new file mode 100644
index 0000000..d77d777
--- /dev/null
+++ b/tests/test_include/cros_gralloc_handle.h
@@ -0,0 +1,53 @@
+// clang-format off
+/*
+ * Copyright 2016 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef CROS_GRALLOC_HANDLE_H
+#define CROS_GRALLOC_HANDLE_H
+
+#include <cstdint>
+#include <cutils/native_handle.h>
+
+#define DRV_MAX_PLANES 4
+#define DRV_MAX_FDS (DRV_MAX_PLANES + 1)
+
+struct cros_gralloc_handle : public native_handle_t {
+	/*
+	 * File descriptors must immediately follow the native_handle_t base and used file
+	 * descriptors must be packed at the beginning of this array to work with
+	 * native_handle_clone().
+	 *
+	 * This field contains 'num_planes' plane file descriptors followed by an optional metadata
+	 * reserved region file descriptor if 'reserved_region_size' is greater than zero.
+	 */
+	int32_t fds[DRV_MAX_FDS];
+	uint32_t strides[DRV_MAX_PLANES];
+	uint32_t offsets[DRV_MAX_PLANES];
+	uint32_t sizes[DRV_MAX_PLANES];
+	uint32_t id;
+	uint32_t width;
+	uint32_t height;
+	uint32_t format; /* DRM format */
+	uint32_t tiling;
+	uint64_t format_modifier;
+	uint64_t use_flags; /* Buffer creation flags */
+	uint32_t magic;
+	uint32_t pixel_stride;
+	int32_t droid_format;
+	int32_t usage; /* Android usage. */
+	uint32_t num_planes;
+	uint64_t reserved_region_size;
+	uint64_t total_size; /* Total allocation size */
+	/*
+	 * Name is a null terminated char array located at handle->base.data[handle->name_offset].
+	 */
+	uint32_t name_offset;
+} __attribute__((packed));
+
+typedef const struct cros_gralloc_handle *cros_gralloc_handle_t;
+
+#endif
+// clang-format on
diff --git a/tests/test_include/gralloc_helper.h b/tests/test_include/gralloc_helper.h
index e65fc1c..b6cd24d 100644
--- a/tests/test_include/gralloc_helper.h
+++ b/tests/test_include/gralloc_helper.h
@@ -21,7 +21,8 @@
 #define GRALLOC_HELPER_H_
 
 #include <sys/mman.h>
-#include <android/log.h>
+#include <sys/user.h>
+#include "utils/log.h"
 
 #ifndef AWAR
 #define AWAR(fmt, args...) \
diff --git a/tests/test_include/gralloc_priv.h b/tests/test_include/gralloc_priv.h
index 2cfae7f..e771a69 100644
--- a/tests/test_include/gralloc_priv.h
+++ b/tests/test_include/gralloc_priv.h
@@ -28,7 +28,7 @@
 #include <unistd.h>
 #include <sys/mman.h>
 #include <cutils/native_handle.h>
-#include <utils/Log.h>
+#include "utils/log.h"
 
 #if GRALLOC_USE_GRALLOC1_API
 #include <hardware/gralloc1.h>
diff --git a/tests/test_include/img_gralloc1_public.h b/tests/test_include/img_gralloc1_public.h
index 5305845..aef435f 100644
--- a/tests/test_include/img_gralloc1_public.h
+++ b/tests/test_include/img_gralloc1_public.h
@@ -30,7 +30,9 @@
  */
 
 #include <hardware/gralloc.h>
+#if 0 /* Header below is not used by drm_hwcomposer */
 #include <hardware/memtrack.h>
+#endif
 
 #define ALIGN(x,a)	(((x) + (a) - 1L) & ~((a) - 1L))
 #define HW_ALIGN	16
@@ -161,6 +163,8 @@
 }
 IMG_buffer_format_public_t;
 
+#if 0 /* Not used by drm_hwcomposer but require additional dependencies */
+
 typedef struct
 {
 	/* Base memtrack record, copied to caller */
@@ -207,6 +211,8 @@
 }
 IMG_gralloc_module_public_t;
 
+#endif
+
 /**
  * pixel format definitions
  */
diff --git a/tests/worker_test.cpp b/tests/worker_test.cpp
index cb6275e..d1eb2b3 100644
--- a/tests/worker_test.cpp
+++ b/tests/worker_test.cpp
@@ -8,17 +8,13 @@
 using android::Worker;
 
 struct TestWorker : public Worker {
-  TestWorker()
-      : Worker("test-worker", HAL_PRIORITY_URGENT_DISPLAY),
-        value(0),
-        enabled_(false) {
-  }
+  TestWorker() : Worker("test-worker", HAL_PRIORITY_URGENT_DISPLAY){};
 
   int Init() {
     return InitWorker();
   }
 
-  void Routine() {
+  void Routine() override {
     Lock();
     if (!enabled_) {
       int ret = WaitForSignalOrExitLocked();
@@ -47,16 +43,17 @@
       Signal();
   }
 
-  int value;
+  // NOLINTNEXTLINE: should not be public
+  int value{};
 
  private:
-  bool enabled_;
+  bool enabled_{};
 };
 
 struct WorkerTest : public testing::Test {
   TestWorker worker;
 
-  virtual void SetUp() {
+  void SetUp() override {
     worker.Init();
   }
 
@@ -65,7 +62,8 @@
   }
 };
 
-TEST_F(WorkerTest, test_worker) {
+// NOLINTNEXTLINE: required by gtest macros
+TEST_F(WorkerTest, TestWorker) {
   // already isInitialized so should succeed
   ASSERT_TRUE(worker.initialized());
 
@@ -102,7 +100,8 @@
   ASSERT_FALSE(worker.initialized());
 }
 
-TEST_F(WorkerTest, exit_while_running) {
+// NOLINTNEXTLINE: required by gtest macros
+TEST_F(WorkerTest, ExitWhileRunning) {
   worker.Control(true);
 
   std::this_thread::sleep_for(std::chrono::milliseconds(50));
diff --git a/utils/autolock.cpp b/utils/autolock.cpp
index 4b5cd7e..3342e46 100644
--- a/utils/autolock.cpp
+++ b/utils/autolock.cpp
@@ -19,11 +19,12 @@
 
 #include "autolock.h"
 
-#include <log/log.h>
 #include <pthread.h>
 
 #include <cerrno>
 
+#include "utils/log.h"
+
 namespace android {
 
 int AutoLock::Lock() {
diff --git a/utils/gralloc.h b/utils/gralloc.h
deleted file mode 100644
index 1bf08ee..0000000
--- a/utils/gralloc.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2021 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.
- */
-
-#ifndef UTILS_GRALLOC_H_
-#define UTILS_GRALLOC_H_
-
-#ifdef ANDROID
-#include <hardware/gralloc.h>
-#else
-
-/* STUBS */
-
-#include <cstdint>
-
-using buffer_handle_t = int;
-
-// NOLINTNEXTLINE(readability-identifier-naming)
-constexpr auto GRALLOC_HARDWARE_MODULE_ID = "gralloc";
-
-enum {
-  HAL_PIXEL_FORMAT_RGBA_8888 = 1,   // NOLINT(readability-identifier-naming)
-  HAL_PIXEL_FORMAT_RGBX_8888 = 2,   // NOLINT(readability-identifier-naming)
-  HAL_PIXEL_FORMAT_RGB_888 = 3,     // NOLINT(readability-identifier-naming)
-  HAL_PIXEL_FORMAT_RGB_565 = 4,     // NOLINT(readability-identifier-naming)
-  HAL_PIXEL_FORMAT_BGRA_8888 = 5,   // NOLINT(readability-identifier-naming)
-  HAL_PIXEL_FORMAT_RGBA_FP16 = 22,  // NOLINT(readability-identifier-naming)
-  HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED = 34,  // NOLINT(readability-identifier-naming)
-  HAL_PIXEL_FORMAT_RGBA_1010102 = 43,  // NOLINT(readability-identifier-naming)
-  HAL_PIXEL_FORMAT_YV12 = 842094169,   // NOLINT(readability-identifier-naming)
-};
-
-// NOLINTNEXTLINE(readability-identifier-naming)
-struct hw_module_t {
-  uint32_t tag{};
-  uint16_t module_api_version{};
-  uint16_t hal_api_version{};
-  const char *id{};
-  const char *name{};
-  const char *author{};
-  void *dso{};
-};
-
-// NOLINTNEXTLINE(readability-identifier-naming)
-struct gralloc_module_t {
-  hw_module_t common;
-};
-
-auto inline hw_get_module(const char * /*id*/,
-                          const struct hw_module_t ** /*module*/) -> int {
-  return -1;
-}
-
-#endif
-
-#endif
diff --git a/utils/log.h b/utils/log.h
index 1fe4713..a48d2e7 100644
--- a/utils/log.h
+++ b/utils/log.h
@@ -7,6 +7,9 @@
 
 #else
 
+#include <cinttypes>
+#include <cstdio>
+
 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
 #define ALOGE(args...) printf("ERR: " args)
 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)