2018-12-29 06:00:58 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* 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
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Embedding-provided build ID information, used by SpiderMonkey to tag cached
|
|
|
|
* compilation data so that cached data can be reused when possible, or
|
|
|
|
* discarded and regenerated if necessary.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef js_BuildId_h
|
|
|
|
#define js_BuildId_h
|
|
|
|
|
|
|
|
#include "jstypes.h" // JS_PUBLIC_API
|
|
|
|
|
|
|
|
#include "js/Vector.h" // js::Vector
|
|
|
|
|
|
|
|
namespace js {
|
|
|
|
|
|
|
|
class SystemAllocPolicy;
|
|
|
|
|
|
|
|
} // namespace js
|
|
|
|
|
|
|
|
namespace JS {
|
|
|
|
|
|
|
|
/** Vector of characters used for holding build ids. */
|
|
|
|
using BuildIdCharVector = js::Vector<char, 0, js::SystemAllocPolicy>;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return the buildId (represented as a sequence of characters) associated with
|
|
|
|
* the currently-executing build. If the JS engine is embedded such that a
|
|
|
|
* single cache entry can be observed by different compiled versions of the JS
|
|
|
|
* engine, it is critical that the buildId shall change for each new build of
|
|
|
|
* the JS engine.
|
|
|
|
*/
|
|
|
|
using BuildIdOp = bool (*)(BuildIdCharVector* buildId);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Embedder hook to set the buildId-generating function.
|
|
|
|
*/
|
|
|
|
extern JS_PUBLIC_API void SetProcessBuildIdOp(BuildIdOp buildIdOp);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Some cached data is, in addition to being build-specific, CPU-specific: the
|
|
|
|
* cached data depends on CPU features like a particular level of SSE support.
|
|
|
|
*
|
|
|
|
* This function produces a buildId that includes:
|
|
|
|
*
|
|
|
|
* * the buildId defined by the embedder-provided BuildIdOp set by
|
|
|
|
* JS::SetProcessBuildIdOp, and
|
|
|
|
* * CPU feature information for the current CPU.
|
|
|
|
*
|
|
|
|
* Embedders may use this function to tag cached data whose validity depends
|
|
|
|
* on having consistent buildId *and* on the CPU supporting features identical
|
|
|
|
* to those in play when the cached data was computed.
|
|
|
|
*/
|
2021-02-12 07:09:23 +03:00
|
|
|
[[nodiscard]] extern JS_PUBLIC_API bool GetOptimizedEncodingBuildId(
|
2018-12-29 06:00:58 +03:00
|
|
|
BuildIdCharVector* buildId);
|
|
|
|
|
2020-08-31 22:38:31 +03:00
|
|
|
/**
|
|
|
|
* Script bytecode is dependent on the buildId and a few other things.
|
|
|
|
*
|
|
|
|
* This function produces a buildId that includes:
|
|
|
|
*
|
|
|
|
* * The buildId defined by the embedder-provided BuildIdOp set by
|
|
|
|
* JS::SetProcessBuildIdOp.
|
|
|
|
* * Additional bytes describing things like endianness, pointer size and
|
|
|
|
* other state XDR buffers depend on.
|
|
|
|
*
|
|
|
|
* Note: this value may depend on runtime preferences so isn't guaranteed to be
|
|
|
|
* stable across restarts.
|
|
|
|
*
|
|
|
|
* Embedders should use this function to tag transcoded bytecode.
|
|
|
|
* See Transcoding.h.
|
|
|
|
*/
|
2021-02-12 07:09:23 +03:00
|
|
|
[[nodiscard]] extern JS_PUBLIC_API bool GetScriptTranscodingBuildId(
|
2020-08-31 22:38:31 +03:00
|
|
|
BuildIdCharVector* buildId);
|
|
|
|
|
2018-12-29 06:00:58 +03:00
|
|
|
} // namespace JS
|
|
|
|
|
|
|
|
#endif /* js_BuildId_h */
|