Differential D3143 Diff 14286 ps/trunk/libraries/source/spidermonkey/include-win32-debug/js/SliceBudget.h
Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/libraries/source/spidermonkey/include-win32-debug/js/SliceBudget.h
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- | /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- | ||||
* vim: set ts=8 sts=4 et sw=4 tw=99: | * vim: set ts=8 sts=2 et sw=2 tw=80: | ||||
* This Source Code Form is subject to the terms of the Mozilla Public | * This Source Code Form is subject to the terms of the Mozilla Public | ||||
* License, v. 2.0. If a copy of the MPL was not distributed with this | * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | ||||
#ifndef js_SliceBudget_h | #ifndef js_SliceBudget_h | ||||
#define js_SliceBudget_h | #define js_SliceBudget_h | ||||
#include "mozilla/TimeStamp.h" | |||||
#include <stdint.h> | #include <stdint.h> | ||||
#include "jstypes.h" | #include "jstypes.h" | ||||
namespace js { | namespace js { | ||||
struct JS_PUBLIC_API TimeBudget { | struct JS_PUBLIC_API TimeBudget { | ||||
int64_t budget; | int64_t budget; | ||||
Show All 9 Lines | |||||
/* | /* | ||||
* This class records how much work has been done in a given collection slice, | * This class records how much work has been done in a given collection slice, | ||||
* so that we can return before pausing for too long. Some slices are allowed | * so that we can return before pausing for too long. Some slices are allowed | ||||
* to run for unlimited time, and others are bounded. To reduce the number of | * to run for unlimited time, and others are bounded. To reduce the number of | ||||
* gettimeofday calls, we only check the time every 1000 operations. | * gettimeofday calls, we only check the time every 1000 operations. | ||||
*/ | */ | ||||
class JS_PUBLIC_API SliceBudget { | class JS_PUBLIC_API SliceBudget { | ||||
static const int64_t unlimitedDeadline = INT64_MAX; | static mozilla::TimeStamp unlimitedDeadline; | ||||
static const intptr_t unlimitedStartCounter = INTPTR_MAX; | static const intptr_t unlimitedStartCounter = INTPTR_MAX; | ||||
bool checkOverBudget(); | bool checkOverBudget(); | ||||
SliceBudget(); | SliceBudget(); | ||||
public: | public: | ||||
// Memory of the originally requested budget. If isUnlimited, neither of | // Memory of the originally requested budget. If isUnlimited, neither of | ||||
// these are in use. If deadline==0, then workBudget is valid. Otherwise | // these are in use. If deadline==0, then workBudget is valid. Otherwise | ||||
// timeBudget is valid. | // timeBudget is valid. | ||||
TimeBudget timeBudget; | TimeBudget timeBudget; | ||||
WorkBudget workBudget; | WorkBudget workBudget; | ||||
int64_t deadline; /* in microseconds */ | mozilla::TimeStamp deadline; | ||||
intptr_t counter; | intptr_t counter; | ||||
static const intptr_t CounterReset = 1000; | static const intptr_t CounterReset = 1000; | ||||
static const int64_t UnlimitedTimeBudget = -1; | static const int64_t UnlimitedTimeBudget = -1; | ||||
static const int64_t UnlimitedWorkBudget = -1; | static const int64_t UnlimitedWorkBudget = -1; | ||||
/* Use to create an unlimited budget. */ | /* Use to create an unlimited budget. */ | ||||
static SliceBudget unlimited() { return SliceBudget(); } | static SliceBudget unlimited() { return SliceBudget(); } | ||||
/* Instantiate as SliceBudget(TimeBudget(n)). */ | /* Instantiate as SliceBudget(TimeBudget(n)). */ | ||||
explicit SliceBudget(TimeBudget time); | explicit SliceBudget(TimeBudget time); | ||||
/* Instantiate as SliceBudget(WorkBudget(n)). */ | /* Instantiate as SliceBudget(WorkBudget(n)). */ | ||||
explicit SliceBudget(WorkBudget work); | explicit SliceBudget(WorkBudget work); | ||||
void makeUnlimited() { | void makeUnlimited() { | ||||
MOZ_ASSERT(unlimitedDeadline); | |||||
deadline = unlimitedDeadline; | deadline = unlimitedDeadline; | ||||
counter = unlimitedStartCounter; | counter = unlimitedStartCounter; | ||||
} | } | ||||
void step(intptr_t amt = 1) { counter -= amt; } | void step(intptr_t amt = 1) { counter -= amt; } | ||||
bool isOverBudget() { | bool isOverBudget() { | ||||
if (counter > 0) return false; | if (counter > 0) { | ||||
return false; | |||||
} | |||||
return checkOverBudget(); | return checkOverBudget(); | ||||
} | } | ||||
bool isWorkBudget() const { return deadline == 0; } | bool isWorkBudget() const { return deadline.IsNull(); } | ||||
bool isTimeBudget() const { return deadline > 0 && !isUnlimited(); } | bool isTimeBudget() const { return !deadline.IsNull() && !isUnlimited(); } | ||||
bool isUnlimited() const { return deadline == unlimitedDeadline; } | bool isUnlimited() const { return deadline == unlimitedDeadline; } | ||||
int describe(char* buffer, size_t maxlen) const; | int describe(char* buffer, size_t maxlen) const; | ||||
static void Init(); | |||||
}; | }; | ||||
} // namespace js | } // namespace js | ||||
#endif /* js_SliceBudget_h */ | #endif /* js_SliceBudget_h */ |
Wildfire Games · Phabricator