| // Copyright 2026 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_ASYNC_TASK_H_ |
| #define SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_ASYNC_TASK_H_ |
| |
| #include <stdint.h> |
| |
| #include <string> |
| #include <vector> |
| |
| #include "src/developer/debug/zxdb/client/client_object.h" |
| #include "src/developer/debug/zxdb/expr/expr_value.h" |
| #include "src/developer/debug/zxdb/symbols/identifier.h" |
| #include "src/developer/debug/zxdb/symbols/location.h" |
| #include "src/lib/fxl/macros.h" |
| #include "src/lib/fxl/memory/weak_ptr.h" |
| |
| namespace zxdb { |
| |
| // Abstractly represents a single asynchronous task (e.g. a Rust future). |
| class AsyncTask : public ClientObject { |
| public: |
| explicit AsyncTask(Session* session); |
| virtual ~AsyncTask(); |
| |
| fxl::WeakPtr<AsyncTask> GetWeakPtr(); |
| |
| // Returns a unique identifier for this task if available, or 0. |
| virtual uint64_t GetId() const = 0; |
| |
| enum class Type { |
| kTask, |
| kFuture, |
| kScope, |
| kFunction, |
| kOther, |
| }; |
| virtual Type GetType() const = 0; |
| |
| // Returns the location where this task was defined or is currently executing. |
| virtual const Location& GetLocation() const = 0; |
| |
| // Returns the identifier of this asynchronous task. This can be anything from a function name or |
| // a type name, like JoinHandles, Timers, Scopes, or literal Task objects in the respective |
| // runtime. |
| virtual const Identifier& GetIdentifier() const = 0; |
| |
| // Returns a string representation of the task's current state (e.g. "Pending", "Ready"). |
| virtual std::string GetState() const = 0; |
| |
| struct NamedValue { |
| std::optional<std::string> name; |
| ExprValue value; |
| }; |
| // Returns all variables that are associated with this task, these can be lambda captures, state |
| // variables, or anything else that the runtime decided to include in the task object. |
| virtual const std::vector<NamedValue>& GetValues() const = 0; |
| |
| // Returns the children of this task (tasks that this task is awaiting). |
| using Ref = std::reference_wrapper<const AsyncTask>; |
| virtual std::vector<Ref> GetChildren() const = 0; |
| |
| private: |
| fxl::WeakPtrFactory<AsyncTask> weak_factory_; |
| |
| FXL_DISALLOW_COPY_AND_ASSIGN(AsyncTask); |
| }; |
| |
| } // namespace zxdb |
| |
| #endif // SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_ASYNC_TASK_H_ |