mirror of
https://github.com/matrix-construct/construct
synced 2024-09-27 19:28:52 +02:00
ircd::ctx: Add direct flags reference accessor to interface.
This commit is contained in:
parent
215a0148b4
commit
00fe4baa2a
4 changed files with 25 additions and 3 deletions
|
@ -44,7 +44,7 @@ namespace ircd::ctx
|
||||||
///
|
///
|
||||||
struct ircd::ctx::context
|
struct ircd::ctx::context
|
||||||
{
|
{
|
||||||
enum flags :uint;
|
enum flags :uint32_t;
|
||||||
using function = std::function<void ()>;
|
using function = std::function<void ()>;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -96,7 +96,7 @@ struct ircd::ctx::context
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ircd::ctx::context::flags
|
enum ircd::ctx::context::flags
|
||||||
:uint
|
:uint32_t
|
||||||
{
|
{
|
||||||
POST = 0x0001, ///< Defers spawn with an ios.post()
|
POST = 0x0001, ///< Defers spawn with an ios.post()
|
||||||
DISPATCH = 0x0002, ///< Defers spawn with an ios.dispatch()
|
DISPATCH = 0x0002, ///< Defers spawn with an ios.dispatch()
|
||||||
|
|
|
@ -47,6 +47,7 @@ namespace ircd::ctx
|
||||||
|
|
||||||
const uint64_t &id(const ctx &) noexcept; // Unique ID for context
|
const uint64_t &id(const ctx &) noexcept; // Unique ID for context
|
||||||
string_view name(const ctx &) noexcept; // User's optional label for context
|
string_view name(const ctx &) noexcept; // User's optional label for context
|
||||||
|
const uint32_t &flags(const ctx &) noexcept; // Direct flags access
|
||||||
const int32_t ¬es(const ctx &) noexcept; // Peeks at internal semaphore count
|
const int32_t ¬es(const ctx &) noexcept; // Peeks at internal semaphore count
|
||||||
const uint64_t &epoch(const ctx &) noexcept; // Context switching counter
|
const uint64_t &epoch(const ctx &) noexcept; // Context switching counter
|
||||||
const ulong &cycles(const ctx &) noexcept; // Accumulated tsc (not counting cur slice)
|
const ulong &cycles(const ctx &) noexcept; // Accumulated tsc (not counting cur slice)
|
||||||
|
@ -61,6 +62,7 @@ namespace ircd::ctx
|
||||||
bool waiting(const ctx &) noexcept; // started() && !finished() && !running()
|
bool waiting(const ctx &) noexcept; // started() && !finished() && !running()
|
||||||
bool queued(const ctx &) noexcept; // !running() && notes() > 0
|
bool queued(const ctx &) noexcept; // !running() && notes() > 0
|
||||||
|
|
||||||
|
uint32_t &flags(ctx &) noexcept; // Direct flags access
|
||||||
int8_t ionice(ctx &, const int8_t &); // IO priority nice-value
|
int8_t ionice(ctx &, const int8_t &); // IO priority nice-value
|
||||||
int8_t nice(ctx &, const int8_t &); // Scheduling priority nice-value
|
int8_t nice(ctx &, const int8_t &); // Scheduling priority nice-value
|
||||||
void interruptible(ctx &, const bool &); // False for interrupt suppression.
|
void interruptible(ctx &, const bool &); // False for interrupt suppression.
|
||||||
|
|
18
ircd/ctx.cc
18
ircd/ctx.cc
|
@ -537,6 +537,15 @@ ircd::ctx::ionice(ctx &ctx,
|
||||||
return ctx.ionice;
|
return ctx.ionice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns writable reference to the flags of ctx
|
||||||
|
[[gnu::hot]]
|
||||||
|
uint32_t &
|
||||||
|
ircd::ctx::flags(ctx &ctx)
|
||||||
|
noexcept
|
||||||
|
{
|
||||||
|
return ctx.flags;
|
||||||
|
}
|
||||||
|
|
||||||
/// !running() && notes > 0
|
/// !running() && notes > 0
|
||||||
[[gnu::hot]]
|
[[gnu::hot]]
|
||||||
bool
|
bool
|
||||||
|
@ -654,6 +663,15 @@ noexcept
|
||||||
return ctx.notes;
|
return ctx.notes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns reference to the flags of ctx
|
||||||
|
[[gnu::hot]]
|
||||||
|
const uint32_t &
|
||||||
|
ircd::ctx::flags(const ctx &ctx)
|
||||||
|
noexcept
|
||||||
|
{
|
||||||
|
return ctx.flags;
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the developer's optional name literal for `ctx`
|
/// Returns the developer's optional name literal for `ctx`
|
||||||
[[gnu::hot]]
|
[[gnu::hot]]
|
||||||
ircd::string_view
|
ircd::string_view
|
||||||
|
|
|
@ -28,12 +28,14 @@ namespace ircd::ctx::prof
|
||||||
struct ircd::ctx::ctx
|
struct ircd::ctx::ctx
|
||||||
:instance_list<ctx>
|
:instance_list<ctx>
|
||||||
{
|
{
|
||||||
|
using flags_type = std::underlying_type<context::flags>::type;
|
||||||
|
|
||||||
static uint64_t id_ctr; // monotonic
|
static uint64_t id_ctr; // monotonic
|
||||||
static ios::descriptor ios_desc;
|
static ios::descriptor ios_desc;
|
||||||
|
|
||||||
uint64_t id {++id_ctr}; // Unique runtime ID
|
uint64_t id {++id_ctr}; // Unique runtime ID
|
||||||
string_view name; // User given name (optional)
|
string_view name; // User given name (optional)
|
||||||
context::flags flags; // User given flags
|
flags_type flags; // User given flags
|
||||||
int8_t nice {0}; // Scheduling priority nice-value
|
int8_t nice {0}; // Scheduling priority nice-value
|
||||||
int8_t ionice {0}; // IO priority nice-value (defaults for fs::opts)
|
int8_t ionice {0}; // IO priority nice-value (defaults for fs::opts)
|
||||||
int32_t notes {0}; // norm: 0 = asleep; 1 = awake; inc by others; dec by self
|
int32_t notes {0}; // norm: 0 = asleep; 1 = awake; inc by others; dec by self
|
||||||
|
|
Loading…
Reference in a new issue