Hash :
f62405c5
Author :
Date :
2022-10-31T18:47:52
Add utilities to get the Android backtrace
* Added getBacktraceInfo(), which returns the backtrace information
from the ANGLE code, including the addresses and the symbols if
possible
* Returns the data in an instance of the new class BacktraceInfo.
* In order to access this function, backtrace_utils.h has been
included in vk_utils.h
* New GN flag to make use of this feature:
* angle_enable_unwind_backtrace_support
* Current only available on Android (debug mode)
* If the flag is disabled, getBacktraceInfo() returns an empty
object.
* Added functions in util/ (per platform) to print the BacktraceInfo
data.
* Example of usage:
angle::printBacktraceInfo(angle::getBacktraceInfo());
* Minor edit: Moved cstdint from android_util.cpp to its header.
Bug: b/258475923
Change-Id: I6115462a1a2845d40c7cafc14ce52df09ecdcf34
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3995843
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
//
// Copyright 2022 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// backtrace_utils.h:
// Tools to extract the backtrace from the ANGLE code during execution.
//
#ifndef COMMON_BACKTRACEUTILS_H_
#define COMMON_BACKTRACEUTILS_H_
#include <string>
#include <vector>
#include "debug.h"
namespace angle
{
// Used to store the backtrace information, such as the stack addresses and symbols.
class BacktraceInfo
{
public:
BacktraceInfo() {}
~BacktraceInfo() {}
void clear()
{
mStackAddresses.clear();
mStackSymbols.clear();
}
size_t getSize() const
{
ASSERT(mStackAddresses.size() == mStackSymbols.size());
return mStackAddresses.size();
}
std::vector<void *> getStackAddresses() const { return mStackAddresses; }
std::vector<std::string> getStackSymbols() const { return mStackSymbols; }
void *getStackAddress(size_t index) const
{
ASSERT(index < mStackAddresses.size());
return mStackAddresses[index];
}
std::string getStackSymbol(size_t index) const
{
ASSERT(index < mStackSymbols.size());
return mStackSymbols[index];
}
// Used to add the stack addresses and their corresponding symbols to the object, when
// angle_enable_unwind_backtrace_support is enabled on Android.
void populateBacktraceInfo(void **stackAddressBuffer, size_t stackAddressCount);
private:
std::vector<void *> mStackAddresses;
std::vector<std::string> mStackSymbols;
};
// Used to obtain the stack addresses and symbols from the device, when
// angle_enable_unwind_backtrace_support is enabled on Android. Otherwise , it returns an empty
// object.
BacktraceInfo getBacktraceInfo();
// Used to print the stack addresses and symbols embedded in the BacktraceInfo object.
void printBacktraceInfo(BacktraceInfo backtraceInfo);
} // namespace angle
#endif // COMMON_BACKTRACEUTILS_H_