mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-02 10:53:44 +00:00
- The client puts a shape in its sorted, blended pass only when its NiMaterialProperty alpha is under 0.99999 (ShaderCommon::GetAlphaFlags 0x0109f5a0; the NiAlphaProperty blend flag isn't read); at 1.0 it's drawn solid with blending off. Transparent (and transparent glitter) shapes now get a material with alpha 0.9999, as the S01_Alpha shapes of the game's own brick models (res/BrickModels/ndmade) do; opaque shapes keep 1.0. Models with a transparent brick change; the others are byte for byte the same. - dUgcServer's files move into Bricks/, Model/, Render/, Formats/ and Processing/ (the CMakeLists says what each holds); includes are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
44 lines
1.8 KiB
C++
44 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
|
|
/**
|
|
* Keeps the UGC workers' CPU use under a budget. The long loops (renders, ambient occlusion, icons) call Checkpoint
|
|
* every few milliseconds of work; it adds the calling thread's CPU time since its last call to a shared account that
|
|
* the budget fills at `budget` CPUs per second, and sleeps while the account is overdrawn. So the workers together
|
|
* average at most the budget however many there are, long jobs included, and without a budget it costs nothing.
|
|
*/
|
|
namespace UgcThrottle {
|
|
// CPUs the workers may use together on average (1.5: one and a half cores); 0 or less: no limit
|
|
void SetBudget(double cpus);
|
|
double GetBudget();
|
|
|
|
// Account the calling thread's CPU time and sleep when over the budget. Throws Cancelled once Cancel(true) was
|
|
// called, so a job stops in moments when the server shuts down.
|
|
void Checkpoint();
|
|
|
|
// Thrown by Checkpoint while cancelled: the job is abandoned, not failed (its row stays waiting)
|
|
struct Cancelled {};
|
|
// Stop (true) or allow (false) every job's work: set when the server stops, cleared when it starts
|
|
void Cancel(bool cancel);
|
|
bool IsCancelled();
|
|
|
|
// Start accounting on this thread from now (a worker starting a job), so time spent idle isn't counted
|
|
void Begin();
|
|
|
|
struct Stats {
|
|
uint64_t sleptMs{}; // since start
|
|
int64_t lastSleepUnixMs{}; // when it last slept, 0 never
|
|
};
|
|
Stats GetStats();
|
|
|
|
// This thread's CPU time in seconds
|
|
double ThreadCpuSeconds();
|
|
|
|
// Parses "18-23" (from 18:00 to 23:59; may wrap past midnight, "22-6") into from and to; false when it isn't that
|
|
bool ParseHours(const std::string& text, int& from, int& to);
|
|
// Whether `hour` (0-23) is inside the range; never when from or to is negative
|
|
bool InHours(int hour, int from, int to);
|
|
}
|