Add a HealthMonitor that detects hanging tasks.

Introduced watchdogs on SyncThread and RenderThread operations. For
more detail, see go/gfxstream-health-monitor

Test: Unit testing. Built and ran emulator
Bug: 232819676
Change-Id: I83db70d2d1efba999f0a4b92c4bc4b67b78ed70c
diff --git a/stream-servers/RenderThread.cpp b/stream-servers/RenderThread.cpp
index 32ca095..e262924 100644
--- a/stream-servers/RenderThread.cpp
+++ b/stream-servers/RenderThread.cpp
@@ -27,8 +27,10 @@
 #include "RendererImpl.h"
 #include "RingStream.h"
 #include "apigen-codec-common/ChecksumCalculatorThreadInfo.h"
+#include "base/HealthMonitor.h"
 #include "base/Lock.h"
 #include "base/MessageChannel.h"
+#include "base/Metrics.h"
 #include "base/StreamSerializing.h"
 #include "base/System.h"
 #include "base/Tracing.h"
@@ -47,6 +49,7 @@
 #include <string.h>
 
 using android::base::AutoLock;
+using android::base::EventHangMetadata;
 using android::base::MessageChannel;
 
 namespace emugl {
@@ -416,6 +419,10 @@
         bool progress;
 
         do {
+            HealthWatchdog watchdog(
+                FrameBuffer::getFB()->getHealthMonitor(),
+                WATCHDOG_DATA("RenderThread decode operation",
+                              EventHangMetadata::HangType::kRenderThread, nullptr));
 
             if (!seqnoPtr && tInfo.m_puid) {
                 seqnoPtr = FrameBuffer::getFB()->getProcessSequenceNumberPtr(tInfo.m_puid);