Introduce GFXSTREAM_ABORT instead of normal abort.
This CL moves most of our abort() callsites to use the new
GFXSTREAM_ABORT macro, which will allow us to track metrics
about when and where we abort.
Generated code is not yet changed, and test and third-party
code is not affected.
Bug: 204125485
Test: Compile, run emulator.
Change-Id: I909d79a35121f24a60e3b4db2745af5ceeee369c
diff --git a/stream-servers/vulkan/VkAndroidNativeBuffer.cpp b/stream-servers/vulkan/VkAndroidNativeBuffer.cpp
index 9f92bcf..4a8f363 100644
--- a/stream-servers/vulkan/VkAndroidNativeBuffer.cpp
+++ b/stream-servers/vulkan/VkAndroidNativeBuffer.cpp
@@ -15,6 +15,7 @@
#include "cereal/common/goldfish_vk_private_defs.h"
#include "cereal/common/goldfish_vk_extension_structs.h"
+#include "host-common/GfxstreamFatalError.h"
#include "stream-servers/FrameBuffer.h"
#include "GrallocDefs.h"
#include "VkCommonOperations.h"
diff --git a/stream-servers/vulkan/VkCommonOperations.cpp b/stream-servers/vulkan/VkCommonOperations.cpp
index fc95906..330324f 100644
--- a/stream-servers/vulkan/VkCommonOperations.cpp
+++ b/stream-servers/vulkan/VkCommonOperations.cpp
@@ -34,6 +34,7 @@
#include "base/System.h"
#include "base/Tracing.h"
#include "common/goldfish_vk_dispatch.h"
+#include "host-common/GfxstreamFatalError.h"
#include "host-common/vm_operations.h"
#ifdef _WIN32
@@ -792,7 +793,6 @@
sVkEmulation->physdev = physdevs[maxScoringIndex];
sVkEmulation->deviceInfo = deviceInfos[maxScoringIndex];
-
// Postcondition: sVkEmulation has valid device support info
// Ask about image format support here.
@@ -1876,7 +1876,6 @@
bool readRes = FrameBuffer::getFB()->
readColorBufferContents(
colorBufferHandle, &cbNumBytes, nullptr);
-
if (!readRes) {
fprintf(stderr, "%s: Failed to read color buffer 0x%x\n",
__func__, colorBufferHandle);
@@ -2008,7 +2007,7 @@
});
}
}
-
+
vk->vkCmdCopyBufferToImage(
sVkEmulation->commandBuffer,
sVkEmulation->staging.buffer,
@@ -2469,8 +2468,8 @@
if (res == VK_NOT_READY) {
continue;
}
- VK_COMMON_ERROR("Invalid fence state: %d", static_cast<int>(res));
- ::std::abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER))
+ << "Invalid fence state: " << static_cast<int>(res);
}
VkCommandBuffer commandBuffer;
VkCommandBufferAllocateInfo allocateInfo = {
@@ -2504,9 +2503,7 @@
void acquireColorBuffersForHostComposing(const std::vector<uint32_t>& layerColorBuffers,
uint32_t renderTargetColorBuffer) {
if (!sVkEmulation || !sVkEmulation->live) {
- VK_COMMON_ERROR("Host Vulkan device lost.");
- ::std::abort();
- return;
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER)) << "Host Vulkan device lost";
}
std::vector<std::tuple<uint32_t, VkImageLayout>> colorBuffersAndLayouts;
@@ -2647,9 +2644,7 @@
static VkFence doReleaseColorBufferForGuestRendering(
const std::vector<uint32_t>& colorBufferHandles) {
if (!sVkEmulation || !sVkEmulation->live) {
- VK_COMMON_ERROR("Host Vulkan device lost.");
- ::std::abort();
- return VK_NULL_HANDLE;
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER)) << "Host Vulkan device lost";
}
AutoLock lock(sVkEmulationLock);
@@ -2772,9 +2767,7 @@
void releaseColorBufferFromHostComposingSync(const std::vector<uint32_t>& colorBufferHandles) {
VkFence fence = doReleaseColorBufferForGuestRendering(colorBufferHandles);
if (!sVkEmulation || !sVkEmulation->live) {
- VK_COMMON_ERROR("Host Vulkan device lost.");
- ::std::abort();
- return;
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER)) << "Host Vulkan device lost";
}
AutoLock lock(sVkEmulationLock);
diff --git a/stream-servers/vulkan/VkDecoderGlobalState.cpp b/stream-servers/vulkan/VkDecoderGlobalState.cpp
index d480316..24139fc 100644
--- a/stream-servers/vulkan/VkDecoderGlobalState.cpp
+++ b/stream-servers/vulkan/VkDecoderGlobalState.cpp
@@ -44,6 +44,7 @@
#include "common/goldfish_vk_deepcopy.h"
#include "common/goldfish_vk_dispatch.h"
#include "host-common/address_space_device_control_ops.h"
+#include "host-common/GfxstreamFatalError.h"
#include "host-common/vm_operations.h"
#include "host-common/feature_control.h"
#include "vk_util.h"
@@ -456,8 +457,8 @@
if (m_emu->instanceSupportsMoltenVK) {
if (!m_vk->vkSetMTLTextureMVK) {
- fprintf(stderr, "Cannot find vkSetMTLTextureMVK\n");
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER)) <<
+ "Cannot find vkSetMTLTextureMVK";
}
}
@@ -3032,11 +3033,8 @@
vk_find_struct<VkExportMemoryAllocateInfo>(pAllocateInfo);
if (exportAllocInfoPtr) {
- fprintf(stderr,
- "%s: Fatal: Export allocs are to be handled "
- "on the guest side / VkCommonOperations.\n",
- __func__);
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER)) <<
+ "Export allocs are to be handled on the guest side / VkCommonOperations.";
}
const VkMemoryDedicatedAllocateInfo* dedicatedAllocInfoPtr =
@@ -4370,7 +4368,7 @@
currSi.pWaitSemaphores = pBindInfo[i].pWaitSemaphores;
waitDstStageMasks.resize(pBindInfo[i].waitSemaphoreCount, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
currSi.pWaitDstStageMask = waitDstStageMasks.data();
-
+
currSi.signalSemaphoreCount = 0;
currSi.pSignalSemaphores = nullptr;
@@ -4515,8 +4513,8 @@
auto poolInfo = android::base::find(mDescriptorPoolInfo, pool);
if (!poolInfo) {
- fprintf(stderr, "%s: FATAL: descriptor pool %p not found\n", __func__, pool);
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER))
+ << "descriptor pool " << pool << " not found ";
}
DispatchableHandleInfo<uint64_t>* setHandleInfo = sBoxedHandleManager.get(poolId);
@@ -4555,9 +4553,10 @@
*didAlloc = true;
return allocedSet;
} else {
- fprintf(stderr, "%s: FATAL: descriptor pool %p wanted to get set with id 0x%llx but it wasn't allocated\n", __func__,
- pool, (unsigned long long)poolId);
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER))
+ << "descriptor pool " << pool << " wanted to get set with id 0x" <<
+ std::hex << poolId;
+ return nullptr;
}
}
}
@@ -4587,9 +4586,8 @@
if (queueInfo) {
device = queueInfo->device;
} else {
- fprintf(stderr, "%s: FATAL: queue %p (boxed: %p) with no device registered\n", __func__,
- queue, boxed_queue);
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER))
+ << "queue " << queue << "(boxed: " << boxed_queue << ") with no device registered";
}
std::vector<VkDescriptorSet> setsToUpdate(descriptorSetCount, nullptr);
@@ -6259,8 +6257,8 @@
} else if (isDescriptorTypeBufferView(type)) {
numBufferViews += count;
} else {
- fprintf(stderr, "%s: fatal: unknown descriptor type 0x%x\n", __func__, type);
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER))
+ << "unknown descriptor type 0x" << std::hex << type;
}
}
@@ -6303,8 +6301,8 @@
entryForHost.stride = sizeof(VkBufferView);
++bufferViewCount;
} else {
- fprintf(stderr, "%s: fatal: unknown descriptor type 0x%x\n", __func__, type);
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER))
+ << "unknown descriptor type 0x" << std::hex << type;
}
res.linearizedTemplateEntries.push_back(entryForHost);
diff --git a/stream-servers/vulkan/VulkanStream.cpp b/stream-servers/vulkan/VulkanStream.cpp
index 9529c10..7c326d4 100644
--- a/stream-servers/vulkan/VulkanStream.cpp
+++ b/stream-servers/vulkan/VulkanStream.cpp
@@ -18,6 +18,7 @@
#include "base/BumpPool.h"
#include "host-common/feature_control.h"
+#include "host-common/GfxstreamFatalError.h"
#include <vector>
@@ -56,12 +57,12 @@
*ptrAddr = nullptr;
return;
}
-
+
*ptrAddr = mPool.alloc(bytes);
if (!*ptrAddr) {
- fprintf(stderr, "%s: FATAL: alloc failed. Wanted size: %zu\n", __func__, bytes);
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER)) <<
+ "alloc failed. Wanted size: " << bytes;
}
}
@@ -99,10 +100,8 @@
android::base::Stream::fromBe32((uint8_t*)&len);
if (len == UINT32_MAX) {
- fprintf(stderr,
- "%s: FATAL: VulkanStream can't allocate %u bytes\n",
- __func__, UINT32_MAX);
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER)) <<
+ "VulkanStream can't allocate UINT32_MAX bytes";
}
alloc((void**)forOutput, len + 1);
@@ -137,8 +136,8 @@
ssize_t VulkanStream::read(void *buffer, size_t size) {
commitWrite();
if (!mStream->readFully(buffer, size)) {
- E("FATAL: Could not read back %zu bytes", size);
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER))
+ << "Could not read back " << size << " bytes";
}
return size;
}
@@ -162,16 +161,16 @@
void VulkanStream::commitWrite() {
if (!valid()) {
- E("FATAL: Tried to commit write to vulkan pipe with invalid pipe!");
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER)) <<
+ "Tried to commit write to vulkan pipe with invalid pipe!";
}
-
+
int written =
mStream->writeFully(mWriteBuffer.data(), mWritePos);
-
+
if (written) {
- E("FATAL: Did not write exactly %zu bytes!", mWritePos);
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER))
+ << "Did not write exactly " << mWritePos << " bytes!";
}
mWritePos = 0;
}
@@ -226,10 +225,8 @@
}
ssize_t VulkanMemReadingStream::write(const void* buffer, size_t size) {
- fprintf(stderr,
- "%s: FATAL: VulkanMemReadingStream does not support writing\n",
- __func__);
- abort();
+ GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER)) <<
+ "VulkanMemReadingStream does not support writing";
}
uint8_t* VulkanMemReadingStream::beginTrace() {
diff --git a/stream-servers/vulkan/vk_util.h b/stream-servers/vulkan/vk_util.h
index 92c0469..053f2e4 100644
--- a/stream-servers/vulkan/vk_util.h
+++ b/stream-servers/vulkan/vk_util.h
@@ -35,6 +35,8 @@
#include "base/Lock.h"
#include "common/vk_struct_id.h"
+#include "VkCommonOperations.h"
+#include "host-common/GfxstreamFatalError.h"
struct vk_struct_common {
VkStructureType sType;
@@ -267,9 +269,7 @@
do { \
VkResult err = x; \
if (err != VK_SUCCESS) { \
- ::fprintf(stderr, "%s(%u) %s: %s failed, error code = %d\n", \
- __FILE__, __LINE__, __FUNCTION__, #x, err); \
- ::abort(); \
+ GFXSTREAM_ABORT(FatalError(err)); \
} \
} while (0)