// Visit a proxy method Quick frame at a given depth. class GetProxyQuickFrameVisitor final : public StackVisitor { public:
GetProxyQuickFrameVisitor(art::Thread* target, art::Context* ctx, size_t frame_depth)
REQUIRES_SHARED(art::Locks::mutator_lock_)
: art::StackVisitor(target, ctx, art::StackVisitor::StackWalkKind::kIncludeInlinedFrames),
cur_depth_(0u),
frame_depth_(frame_depth),
quick_frame_(nullptr) {}
bool VisitFrame() override REQUIRES_SHARED(Locks::mutator_lock_) { if (GetMethod()->IsRuntimeMethod()) { returntrue;
} if (cur_depth_ == frame_depth_) { // Found frame.
ShadowFrame* shadow_frame = GetCurrentShadowFrame(); if (shadow_frame != nullptr) { // Nothing to do.
} else {
VisitQuickFrameAtSearchedDepth();
} returnfalse;
} else {
++cur_depth_; returntrue;
}
}
// Return the found Quick frame.
ArtMethod** GetQuickFrame() { return quick_frame_;
}
private: // The depth of the currently visited frame.
size_t cur_depth_; // The depth of the currently searched frame.
size_t frame_depth_; // The quick frame, if found.
ArtMethod** quick_frame_; // Method name
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.