Merge changes from topics "gfxstream-egl-headers-dep", "gfxstream_move_gfx_api_logger"

* changes:
  Bring back GfxApiLogger unit tests
  third-party: add egl dependency
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c1f51c9..0d304c6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,6 +42,10 @@
 
 option(ASTC_CPU_DECODING "Enable decoding ASTC textures on the CPU" OFF)
 
+# For now the caller of the cmake script is responsible to create the angle_shader_translator
+# target.
+option(USE_ANGLE_SHADER_PARSER "Build with ANGLE shader parser." OFF)
+
 if(UNIX AND NOT APPLE)
     set(LINUX TRUE)
 endif()
@@ -75,6 +79,8 @@
     add_compile_definitions(VK_USE_PLATFORM_MACOS_MVK)
 elseif(UNIX)
     # TODO(kaiyili, b/179477624): Add Linux specific Vulkan platform macro definitions
+    # Use X11 version of EGL platform specific definitions.
+    add_compile_definitions(USE_X11)
 elseif(WIN32)
     add_compile_definitions(VK_USE_PLATFORM_WIN32_KHR)
 endif()
@@ -118,15 +124,15 @@
 
 set(GFXSTREAM_REPO_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
 
+if(USE_ANGLE_SHADER_PARSER)
+    add_compile_definitions(USE_ANGLE_SHADER_PARSER)
+endif()
+
 include(android.cmake)
 
 set(EXTRA_SUBDIR_TEST_INCLUDE_FILES)
 
 
-if(DEPENDENCY_RESOLUTION STREQUAL "AOSP")
-    add_compile_definitions(USE_ANGLE_SHADER_PARSER)
-endif ()
-
 # Third party dependencies
 add_subdirectory(third-party)
 
diff --git a/scripts/print_gfx_logs/print_gfx_logs.py b/scripts/print_gfx_logs/print_gfx_logs.py
index feb2990..985d171 100644
--- a/scripts/print_gfx_logs/print_gfx_logs.py
+++ b/scripts/print_gfx_logs/print_gfx_logs.py
@@ -20,7 +20,7 @@
 
 design: go/bstar-gfx-logging
 g3doc:  http://g3doc/play/g3doc/games/battlestar/kiwivm/graphics-tips.md#gfx-logs
-C++:    http://source/play-internal/battlestar/aosp/device/generic/vulkan-cereal/base/GfxApiLogger.h
+C++:    http://source/play-internal/battlestar/aosp/device/generic/vulkan-cereal/utils/include/utils/GfxApiLogger.h
 
 Usage:
 
diff --git a/stream-servers/CMakeLists.txt b/stream-servers/CMakeLists.txt
index 9dc2454..ad0407b 100644
--- a/stream-servers/CMakeLists.txt
+++ b/stream-servers/CMakeLists.txt
@@ -64,6 +64,7 @@
         renderControl_dec
         gfxstream-gl-server
         gfxstream-vulkan-server
+        gfxstream_egl_headers
         gfxstream-snapshot
         apigen-codec-common
         ${GFXSTREAM_HOST_COMMON_LIB}
@@ -78,7 +79,6 @@
         ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common
         ${GFXSTREAM_REPO_ROOT}/stream-servers/gl
         ${GFXSTREAM_REPO_ROOT}/stream-servers/vulkan
-        ${GFXSTREAM_REPO_ROOT}/third-party/angle/include
         ${GFXSTREAM_REPO_ROOT}/third-party/glm/include)
 
 if (WIN32)
diff --git a/stream-servers/gl/CMakeLists.txt b/stream-servers/gl/CMakeLists.txt
index b9788aa..f06c262 100644
--- a/stream-servers/gl/CMakeLists.txt
+++ b/stream-servers/gl/CMakeLists.txt
@@ -25,6 +25,7 @@
         PUBLIC
         aemu-base.headers
         gfxstream_vulkan_headers
+        gfxstream_egl_headers
         gles1_dec
         gles2_dec
         GLSnapshot
@@ -37,5 +38,4 @@
                            ${GFXSTREAM_REPO_ROOT}/include
                            ${GFXSTREAM_REPO_ROOT}/stream-servers
                            ${GFXSTREAM_REPO_ROOT}/stream-servers/gl
-                           ${GFXSTREAM_REPO_ROOT}/third-party/angle/include
                            ${GFXSTREAM_REPO_ROOT}/third-party/glm/include)
diff --git a/stream-servers/gl/gles1_dec/CMakeLists.txt b/stream-servers/gl/gles1_dec/CMakeLists.txt
index 98fc749..2d618d0 100644
--- a/stream-servers/gl/gles1_dec/CMakeLists.txt
+++ b/stream-servers/gl/gles1_dec/CMakeLists.txt
@@ -7,12 +7,13 @@
     gles1_dec
     PUBLIC
     apigen-codec-common
-    GLSnapshot)
+    GLSnapshot
+    PRIVATE
+    gfxstream_egl_headers)
 target_include_directories(
     gles1_dec
     PRIVATE
     ${GFXSTREAM_REPO_ROOT}
     ${GFXSTREAM_REPO_ROOT}/include
     ${GFXSTREAM_REPO_ROOT}/stream-servers
-    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common
-    ${GFXSTREAM_REPO_ROOT}/third-party/angle/include)
+    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common)
diff --git a/stream-servers/gl/gles2_dec/CMakeLists.txt b/stream-servers/gl/gles2_dec/CMakeLists.txt
index d520c3c..e2374d6 100644
--- a/stream-servers/gl/gles2_dec/CMakeLists.txt
+++ b/stream-servers/gl/gles2_dec/CMakeLists.txt
@@ -7,12 +7,13 @@
     gles2_dec
     PUBLIC
     apigen-codec-common
-    GLSnapshot)
+    GLSnapshot
+    PRIVATE
+    gfxstream_egl_headers)
 target_include_directories(
     gles2_dec
     PRIVATE
     ${GFXSTREAM_REPO_ROOT}
     ${GFXSTREAM_REPO_ROOT}/include
     ${GFXSTREAM_REPO_ROOT}/stream-servers
-    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common
-    ${GFXSTREAM_REPO_ROOT}/third-party/angle/include)
+    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common)
diff --git a/stream-servers/gl/glestranslator/GLES_CM/CMakeLists.txt b/stream-servers/gl/glestranslator/GLES_CM/CMakeLists.txt
index db1f96b..0028b18 100644
--- a/stream-servers/gl/glestranslator/GLES_CM/CMakeLists.txt
+++ b/stream-servers/gl/glestranslator/GLES_CM/CMakeLists.txt
@@ -11,12 +11,12 @@
     apigen-codec-common
     aemu-base.headers
     aemu-host-common.headers
-    gfxstream-snapshot.headers)
+    gfxstream-snapshot.headers
+    gfxstream_egl_headers)
 target_include_directories(
     GLES_CM_translator_static PRIVATE
     ${GFXSTREAM_REPO_ROOT}
     ${GFXSTREAM_REPO_ROOT}/include
     ${GFXSTREAM_REPO_ROOT}/stream-servers/
     ${GFXSTREAM_REPO_ROOT}/stream-servers/gl/glestranslator/include
-    ${GFXSTREAM_REPO_ROOT}/third-party/angle/include
     ${GFXSTREAM_REPO_ROOT}/third-party/glm/include)
diff --git a/stream-servers/gl/glestranslator/GLES_V2/CMakeLists.txt b/stream-servers/gl/glestranslator/GLES_V2/CMakeLists.txt
index c4f100b..550ed00 100644
--- a/stream-servers/gl/glestranslator/GLES_V2/CMakeLists.txt
+++ b/stream-servers/gl/glestranslator/GLES_V2/CMakeLists.txt
@@ -20,7 +20,7 @@
     aemu-base.headers
     aemu-host-common.headers)
 
-if(DEPENDENCY_RESOLUTION STREQUAL "AOSP")
+if(USE_ANGLE_SHADER_PARSER)
     target_link_libraries(
        GLES_V2_translator_static PRIVATE
        angle_shader_translator)
diff --git a/stream-servers/gl/glestranslator/GLcommon/CMakeLists.txt b/stream-servers/gl/glestranslator/GLcommon/CMakeLists.txt
index cc0af8c..2874168 100644
--- a/stream-servers/gl/glestranslator/GLcommon/CMakeLists.txt
+++ b/stream-servers/gl/glestranslator/GLcommon/CMakeLists.txt
@@ -25,14 +25,14 @@
     ${GFXSTREAM_REPO_ROOT}
     ${GFXSTREAM_REPO_ROOT}/include
     ${GFXSTREAM_REPO_ROOT}/stream-servers
-    ${GFXSTREAM_REPO_ROOT}/stream-servers/gl/glestranslator/include
-    ${GFXSTREAM_REPO_ROOT}/third-party/angle/include)
+    ${GFXSTREAM_REPO_ROOT}/stream-servers/gl/glestranslator/include)
 target_link_libraries(
     GLcommon PUBLIC
     aemu-base.headers
     aemu-host-common.headers
     gfxstream-snapshot.headers
-    gfxstream-compressedTextures)
+    gfxstream-compressedTextures
+    gfxstream_egl_headers)
 if (NOT MSVC)
     target_compile_options(GLcommon PRIVATE -fvisibility=hidden)
 endif()
diff --git a/stream-servers/renderControl_dec/CMakeLists.txt b/stream-servers/renderControl_dec/CMakeLists.txt
index 5fd4111..db8c280 100644
--- a/stream-servers/renderControl_dec/CMakeLists.txt
+++ b/stream-servers/renderControl_dec/CMakeLists.txt
@@ -5,12 +5,13 @@
 target_link_libraries(
     renderControl_dec
     PUBLIC
-    apigen-codec-common)
+    apigen-codec-common
+    PRIVATE
+    gfxstream_egl_headers)
 target_include_directories(
     renderControl_dec
     PRIVATE
     ${GFXSTREAM_REPO_ROOT}
     ${GFXSTREAM_REPO_ROOT}/include
     ${GFXSTREAM_REPO_ROOT}/stream-servers
-    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common
-    ${GFXSTREAM_REPO_ROOT}/third-party/angle/include)
+    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common)
diff --git a/stream-servers/testlibs/CMakeLists.txt b/stream-servers/testlibs/CMakeLists.txt
index ce94658..3e41a07 100644
--- a/stream-servers/testlibs/CMakeLists.txt
+++ b/stream-servers/testlibs/CMakeLists.txt
@@ -18,14 +18,14 @@
 target_link_libraries(
     OSWindow
     PRIVATE
-    aemu-base.headers)
+    aemu-base.headers
+    gfxstream_egl_headers)
 target_include_directories(
     OSWindow
     PUBLIC
     .
     PRIVATE
     ${GFXSTREAM_REPO_ROOT}/include
-    ${GFXSTREAM_REPO_ROOT}/third-party/angle/include
     ${GFXSTREAM_REPO_ROOT}/third-party/glm/include)
 
 if (LINUX)
diff --git a/stream-servers/vulkan/CMakeLists.txt b/stream-servers/vulkan/CMakeLists.txt
index e60c2bf..4db25fa 100644
--- a/stream-servers/vulkan/CMakeLists.txt
+++ b/stream-servers/vulkan/CMakeLists.txt
@@ -28,8 +28,10 @@
         apigen-codec-common
         aemu-base.headers
         gfxstream-snapshot.headers
-        gfxstream_utils.headers
-        gfxstream_vulkan_headers)
+        gfxstream_utils
+        gfxstream_vulkan_headers
+        PRIVATE
+        gfxstream_egl_headers)
 
 if (WIN32)
 target_compile_definitions(gfxstream-vulkan-server PRIVATE -DVK_USE_PLATFORM_WIN32_KHR)
@@ -52,5 +54,4 @@
                            ${GFXSTREAM_REPO_ROOT}/stream-servers
                            ${GFXSTREAM_REPO_ROOT}/stream-servers/vulkan
                            ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common
-                           ${GFXSTREAM_REPO_ROOT}/third-party/angle/include
                            ${GFXSTREAM_REPO_ROOT}/third-party/glm/include)
diff --git a/stream-servers/vulkan/VkCommonOperations.h b/stream-servers/vulkan/VkCommonOperations.h
index 0895111..e825816 100644
--- a/stream-servers/vulkan/VkCommonOperations.h
+++ b/stream-servers/vulkan/VkCommonOperations.h
@@ -29,6 +29,7 @@
 #include "aemu/base/ManagedDescriptor.hpp"
 #include "aemu/base/Optional.h"
 #include "cereal/common/goldfish_vk_private_defs.h"
+#include "utils/GfxApiLogger.h"
 #include "utils/RenderDoc.h"
 
 namespace goldfish_vk {
diff --git a/stream-servers/vulkan/VkDecoderContext.h b/stream-servers/vulkan/VkDecoderContext.h
index 5dc31dd..096c32e 100644
--- a/stream-servers/vulkan/VkDecoderContext.h
+++ b/stream-servers/vulkan/VkDecoderContext.h
@@ -17,9 +17,9 @@
 
 #include <memory>
 
-#include "aemu/base/GfxApiLogger.h"
 #include "aemu/base/HealthMonitor.h"
 #include "aemu/base/Metrics.h"
+#include "utils/GfxApiLogger.h"
 
 struct VkDecoderContext {
     const char* processName = nullptr;
diff --git a/stream-servers/vulkan/VkDecoderGlobalState.h b/stream-servers/vulkan/VkDecoderGlobalState.h
index 4f8b017..00908e5 100644
--- a/stream-servers/vulkan/VkDecoderGlobalState.h
+++ b/stream-servers/vulkan/VkDecoderGlobalState.h
@@ -26,12 +26,12 @@
 #include "VulkanDispatch.h"
 #include "VulkanHandleMapping.h"
 #include "aemu/base/AsyncResult.h"
-#include "aemu/base/GfxApiLogger.h"
 #include "aemu/base/HealthMonitor.h"
 #include "aemu/base/synchronization/Lock.h"
 #include "cereal/common/goldfish_vk_private_defs.h"
 #include "cereal/common/goldfish_vk_transform.h"
 #include "host-common/GfxstreamFatalError.h"
+#include "utils/GfxApiLogger.h"
 #include "vk_util.h"
 
 using android::base::AutoLock;
diff --git a/stream-servers/vulkan/VkDecoderSnapshot.h b/stream-servers/vulkan/VkDecoderSnapshot.h
index 337ac1d..7607ed4 100644
--- a/stream-servers/vulkan/VkDecoderSnapshot.h
+++ b/stream-servers/vulkan/VkDecoderSnapshot.h
@@ -33,9 +33,9 @@
 
 #include <memory>
 
-#include "aemu/base/GfxApiLogger.h"
 #include "aemu/base/HealthMonitor.h"
 #include "common/goldfish_vk_private_defs.h"
+#include "utils/GfxApiLogger.h"
 #include "vk_android_native_buffer.h"
 #include "vulkan_gfxstream.h"
 
diff --git a/stream-servers/vulkan/VkReconstruction.h b/stream-servers/vulkan/VkReconstruction.h
index 812c302..b251978 100644
--- a/stream-servers/vulkan/VkReconstruction.h
+++ b/stream-servers/vulkan/VkReconstruction.h
@@ -16,10 +16,10 @@
 #include "VulkanHandleMapping.h"
 #include "VulkanHandles.h"
 #include "aemu/base/containers/EntityManager.h"
-#include "aemu/base/GfxApiLogger.h"
 #include "aemu/base/HealthMonitor.h"
 #include "aemu/base/files/Stream.h"
 #include "common/goldfish_vk_marshaling.h"
+#include "utils/GfxApiLogger.h"
 
 // A class that captures all important data structures for
 // reconstructing a Vulkan system state via trimmed API record and replay.
diff --git a/stream-servers/vulkan/cereal/CMakeLists.txt b/stream-servers/vulkan/cereal/CMakeLists.txt
index 3784df9..f8c3173 100644
--- a/stream-servers/vulkan/cereal/CMakeLists.txt
+++ b/stream-servers/vulkan/cereal/CMakeLists.txt
@@ -22,7 +22,13 @@
 if (WIN32)
     target_compile_definitions(OpenglRender_vulkan_cereal PRIVATE -DVK_USE_PLATFORM_WIN32_KHR)
 endif()
-target_link_libraries(OpenglRender_vulkan_cereal PUBLIC aemu-base.headers gfxstream_vulkan_headers)
+target_link_libraries(
+    OpenglRender_vulkan_cereal
+    PUBLIC
+    aemu-base.headers
+    gfxstream_vulkan_headers
+    PRIVATE
+    gfxstream_utils.headers)
 
 target_include_directories(OpenglRender_vulkan_cereal
                            PUBLIC
diff --git a/stream-servers/vulkan/emulated_textures/CMakeLists.txt b/stream-servers/vulkan/emulated_textures/CMakeLists.txt
index f729dc0..7fb21b0 100644
--- a/stream-servers/vulkan/emulated_textures/CMakeLists.txt
+++ b/stream-servers/vulkan/emulated_textures/CMakeLists.txt
@@ -6,7 +6,9 @@
 target_link_libraries(emulated_textures PUBLIC
         OpenglRender_vulkan_cereal
         aemu-base.headers
-        gfxstream_vulkan_headers)
+        gfxstream_vulkan_headers
+        PRIVATE
+        gfxstream_utils.headers)
 
 target_include_directories(emulated_textures
         PRIVATE
diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt
index b3e2c68..f4fb8e0 100644
--- a/third-party/CMakeLists.txt
+++ b/third-party/CMakeLists.txt
@@ -1,7 +1,3 @@
-if(DEPENDENCY_RESOLUTION STREQUAL "AOSP")
-    add_subdirectory(angle)
-endif ()
-
 # Configure and add `astc-encoder`, if needed
 if (ASTC_CPU_DECODING)
     set(DECOMPRESSOR ON)   # Disable compression code
@@ -173,6 +169,33 @@
     endif()
 endif()
 
+if(NOT TARGET gfxstream_egl_headers)
+    if(DEPENDENCY_RESOLUTION STREQUAL "AOSP")
+        # ANGLE provides the EGL headers for us.
+        set(ANGLE_PATH ${PROJECT_SOURCE_DIR}/../../../external/angle)
+        if(NOT EXISTS ${ANGLE_PATH})
+            message(FATAL_ERROR "ANGLE is not found.")
+        endif()
+        add_library(gfxstream_egl_headers INTERFACE)
+        target_include_directories(gfxstream_egl_headers INTERFACE ${ANGLE_PATH}/include)
+    elseif(DEPENDENCY_RESOLUTION STREQUAL "SYSTEM")
+        find_package(PkgConfig REQUIRED)
+        pkg_search_module(egl REQUIRED IMPORTED_TARGET GLOBAL egl>=1.5)
+        add_library(gfxstream_egl_headers ALIAS PkgConfig::egl)
+    elseif(DEPENDENCY_RESOLUTION STREQUAL "DOWNLOAD")
+        FetchContent_Declare(
+            egl
+            GIT_REPOSITORY https://github.com/KhronosGroup/EGL-Registry.git
+            GIT_TAG main
+            GIT_REMOTE_UPDATE_STRATEGY CHECKOUT
+            GIT_PROGRESS TRUE
+        )
+        list(APPEND PROJECT_TO_FETCH egl)
+        add_library(gfxstream_egl_headers INTERFACE)
+        target_include_directories(gfxstream_egl_headers INTERFACE ${egl_SOURCE_DIR}/api)
+    endif()
+endif()
+
 if(PROJECT_TO_FETCH)
     FetchContent_MakeAvailable(${PROJECT_TO_FETCH})
 endif()
@@ -186,3 +209,6 @@
 if(NOT TARGET flatbuffers)
     message(FATAL_ERROR "The dependency flatbuffers not found.")
 endif()
+if(USE_ANGLE_SHADER_PARSER AND NOT TARGET angle_shader_translator)
+    message(FATAL_ERROR "The dependency angle_shader_translator not found.")
+endif()
\ No newline at end of file
diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt
index 4091c91..fb942e9 100644
--- a/utils/CMakeLists.txt
+++ b/utils/CMakeLists.txt
@@ -9,15 +9,19 @@
     aemu-host-common.headers
     aemu-base.headers)
 
+add_library(gfxstream_utils OBJECT GfxApiLogger.cpp)
+target_link_libraries(gfxstream_utils PUBLIC gfxstream_utils.headers)
+
 if (ENABLE_VKCEREAL_TESTS)
     add_executable(
         gfxstream_utils_unittests
-        RenderDoc_unittest.cpp)
+        RenderDoc_unittest.cpp
+        GfxApiLogger_unittest.cpp)
 
     target_link_libraries(
         gfxstream_utils_unittests
         PRIVATE
-        gfxstream_utils.headers
+        gfxstream_utils
         ${GFXSTREAM_HOST_COMMON_LIB}
         ${GFXSTREAM_BASE_LIB}
         renderdoc
diff --git a/utils/GfxApiLogger.cpp b/utils/GfxApiLogger.cpp
new file mode 100644
index 0000000..e08bec6
--- /dev/null
+++ b/utils/GfxApiLogger.cpp
@@ -0,0 +1,17 @@
+/*
+ * 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.
+ */
+
+// This file is reserved for upstreaming the GfxApiLogger implementation.
diff --git a/utils/GfxApiLogger_unittest.cpp b/utils/GfxApiLogger_unittest.cpp
new file mode 100644
index 0000000..cb5bc93
--- /dev/null
+++ b/utils/GfxApiLogger_unittest.cpp
@@ -0,0 +1,15 @@
+// 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.
+
+// This file is reserved for upstreaming the GfxApiLogger unit tests.
diff --git a/utils/include/utils/GfxApiLogger.h b/utils/include/utils/GfxApiLogger.h
new file mode 100644
index 0000000..0c40614
--- /dev/null
+++ b/utils/include/utils/GfxApiLogger.h
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+namespace emugl {
+// TODO(kaiyili): complete the implementation in
+// https://r.android.com/c/device/generic/vulkan-cereal/+/2165168.
+class GfxApiLogger {
+   public:
+    void record(const unsigned char* buf, size_t len) {}
+};
+}  // namespace emugl
\ No newline at end of file