$darkmode
Suckless OGL 1.0.0
A lean, high-performance C11 PBR Renderer
perf_mode.c File Reference

Runtime performance optimization implementation. More...

#include "perf_mode.h"
#include "log.h"
#include "profiler.h"
#include <string.h>
Include dependency graph for perf_mode.c:

Enumerations

enum  { PERF_RT_PRIORITY = 50 }
 Default real-time priority for SCHED_FIFO (1-99). More...
 
enum  { PERF_NICE_VALUE = -10 }
 Nice value for elevated priority (-20 to 19). More...
 

Functions

static int detect_gamemode (void)
 Detect if GameMode daemon is available. More...
 
static int detect_native_capabilities (void)
 Detect if native scheduling capabilities are available. More...
 
int perf_mode_init (PerfModeContext *ctx)
 Initialize the performance mode subsystem. More...
 
static int activate_gamemode (PerfModeContext *ctx)
 Activate using GameMode backend. More...
 
static int deactivate_gamemode (PerfModeContext *ctx)
 Deactivate GameMode backend. More...
 
static int activate_native (PerfModeContext *ctx)
 Activate using native Linux scheduler. More...
 
static int deactivate_native (PerfModeContext *ctx)
 Deactivate native Linux scheduler. More...
 
int perf_mode_request_start (PerfModeContext *ctx)
 Request activation of performance mode. More...
 
int perf_mode_request_end (PerfModeContext *ctx)
 Request deactivation of performance mode. More...
 
void perf_mode_cleanup (PerfModeContext *ctx)
 Clean up performance mode resources. More...
 
PerfModeState perf_mode_get_state (const PerfModeContext *ctx)
 Get the current performance mode state. More...
 
PerfModeBackend perf_mode_get_backend (const PerfModeContext *ctx)
 Get the detected backend type. More...
 
const char * perf_mode_get_state_string (const PerfModeContext *ctx)
 Get a human-readable string for the current state. More...
 
int perf_mode_is_active (const PerfModeContext *ctx)
 Check if performance mode is currently active. More...
 

Detailed Description

Runtime performance optimization implementation.

Implements performance mode with two backends:

  1. libgamemode - Preferred when gamemoded is running
  2. Native Linux syscalls - Fallback using sched_setscheduler/nice

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Default real-time priority for SCHED_FIFO (1-99).

Enumerator
PERF_RT_PRIORITY 

◆ anonymous enum

anonymous enum

Nice value for elevated priority (-20 to 19).

Enumerator
PERF_NICE_VALUE 

Function Documentation

◆ activate_gamemode()

static int activate_gamemode ( PerfModeContext ctx)
static

Activate using GameMode backend.

Parameters
ctxContext ptr.
Returns
0 on success, -1 on failure.

◆ activate_native()

static int activate_native ( PerfModeContext ctx)
static

Activate using native Linux scheduler.

Parameters
ctxContext ptr.
Returns
0 on success, -1 on failure.

◆ deactivate_gamemode()

static int deactivate_gamemode ( PerfModeContext ctx)
static

Deactivate GameMode backend.

Parameters
ctxContext ptr.
Returns
0 on success, -1 on failure.

◆ deactivate_native()

static int deactivate_native ( PerfModeContext ctx)
static

Deactivate native Linux scheduler.

Parameters
ctxContext ptr.
Returns
0 on success, -1 on failure.

◆ detect_gamemode()

static int detect_gamemode ( void  )
static

Detect if GameMode daemon is available.

Returns
1 if available, 0 otherwise.

◆ detect_native_capabilities()

static int detect_native_capabilities ( void  )
static

Detect if native scheduling capabilities are available.

Returns
1 if SCHED_FIFO possible, 2 if only nice, 0 otherwise.

◆ perf_mode_cleanup()

void perf_mode_cleanup ( PerfModeContext ctx)

Clean up performance mode resources.

Ensures any active optimizations are properly reverted. Should be called at application shutdown.

Parameters
ctxPointer to the context.
Here is the call graph for this function:

◆ perf_mode_get_backend()

PerfModeBackend perf_mode_get_backend ( const PerfModeContext ctx)

Get the detected backend type.

Parameters
ctxPointer to the context.
Returns
Detected PerfModeBackend value.

◆ perf_mode_get_state()

PerfModeState perf_mode_get_state ( const PerfModeContext ctx)

Get the current performance mode state.

Parameters
ctxPointer to the context.
Returns
Current PerfModeState value.

◆ perf_mode_get_state_string()

const char* perf_mode_get_state_string ( const PerfModeContext ctx)

Get a human-readable string for the current state.

Parameters
ctxPointer to the context.
Returns
Static string describing the current mode (e.g., "GameMode", "Native SCHED_FIFO", "Off").

◆ perf_mode_init()

int perf_mode_init ( PerfModeContext ctx)

Initialize the performance mode subsystem.

Detects available backends (GameMode daemon, native capabilities). Should be called once at application startup.

Parameters
ctxPointer to the context to initialize.
Returns
0 on success, -1 on failure.
Here is the call graph for this function:

◆ perf_mode_is_active()

int perf_mode_is_active ( const PerfModeContext ctx)

Check if performance mode is currently active.

Parameters
ctxPointer to the context.
Returns
1 if active, 0 if not.

◆ perf_mode_request_end()

int perf_mode_request_end ( PerfModeContext ctx)

Request deactivation of performance mode.

Reverts any system changes made by perf_mode_request_start().

Parameters
ctxPointer to the context.
Returns
0 on success, -1 on failure.
Here is the call graph for this function:

◆ perf_mode_request_start()

int perf_mode_request_start ( PerfModeContext ctx)

Request activation of performance mode.

Attempts to activate performance optimizations using the best available backend. Effects may include:

  • CPU governor set to "performance"
  • GPU performance mode enabled
  • Process scheduling priority elevated
  • Background services deprioritized
Parameters
ctxPointer to the context.
Returns
0 on success, -1 on failure.
Note
For native SCHED_FIFO, requires CAP_SYS_NICE or root. GameMode handles permissions via polkit.
Here is the call graph for this function: