1// Copyright 2014 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5/// @docImport 'platform.dart';
6library;
7
8/// A constant that is true if the application was compiled in release mode.
9///
10/// More specifically, this is a constant that is true if the application was
11/// compiled in Dart with the '-Ddart.vm.product=true' flag.
12///
13/// Since this is a const value, it can be used to indicate to the compiler that
14/// a particular block of code will not be executed in release mode, and hence
15/// can be removed.
16///
17/// Generally it is better to use [kDebugMode] or `assert` to gate code, since
18/// using [kReleaseMode] will introduce differences between release and profile
19/// builds, which makes performance testing less representative.
20///
21/// See also:
22///
23/// * [kDebugMode], which is true in debug builds.
24/// * [kProfileMode], which is true in profile builds.
25const bool kReleaseMode = bool.fromEnvironment('dart.vm.product');
26
27/// A constant that is true if the application was compiled in profile mode.
28///
29/// More specifically, this is a constant that is true if the application was
30/// compiled in Dart with the '-Ddart.vm.profile=true' flag.
31///
32/// Since this is a const value, it can be used to indicate to the compiler that
33/// a particular block of code will not be executed in profile mode, an hence
34/// can be removed.
35///
36/// See also:
37///
38/// * [kDebugMode], which is true in debug builds.
39/// * [kReleaseMode], which is true in release builds.
40const bool kProfileMode = bool.fromEnvironment('dart.vm.profile');
41
42/// A constant that is true if the application was compiled in debug mode.
43///
44/// More specifically, this is a constant that is true if the application was
45/// not compiled with '-Ddart.vm.product=true' and '-Ddart.vm.profile=true'.
46///
47/// Since this is a const value, it can be used to indicate to the compiler that
48/// a particular block of code will not be executed in debug mode, and hence
49/// can be removed.
50///
51/// An alternative strategy is to use asserts, as in:
52///
53/// ```dart
54/// assert(() {
55/// // ...debug-only code here...
56/// return true;
57/// }());
58/// ```
59///
60/// See also:
61///
62/// * [kReleaseMode], which is true in release builds.
63/// * [kProfileMode], which is true in profile builds.
64const bool kDebugMode = !kReleaseMode && !kProfileMode;
65
66/// The epsilon of tolerable double precision error.
67///
68/// This is used in various places in the framework to allow for floating point
69/// precision loss in calculations. Differences below this threshold are safe to
70/// disregard.
71const double precisionErrorTolerance = 1e-10;
72
73/// A constant that is true if the application was compiled to run on the web.
74///
75/// See also:
76///
77/// * [defaultTargetPlatform], which is used by themes to find out which
78/// platform the application is running on (or, in the case of a web app,
79/// which platform the application's browser is running in). Can be overridden
80/// in tests with [debugDefaultTargetPlatformOverride].
81/// * [dart:io.Platform], a way to find out the browser's platform that is not
82/// overridable in tests.
83const bool kIsWeb = bool.fromEnvironment('dart.library.js_util');
84
85/// A constant that is true if the application was compiled to WebAssembly.
86///
87/// See also:
88///
89/// * [defaultTargetPlatform], which is used by themes to find out which
90/// platform the application is running on (or, in the case of a web app,
91/// which platform the application's browser is running in). Can be overridden
92/// in tests with [debugDefaultTargetPlatformOverride].
93/// * [dart:io.Platform], a way to find out the browser's platform that is not
94/// overridable in tests.
95const bool kIsWasm = bool.fromEnvironment('dart.tool.dart2wasm');
96