-
-
Notifications
You must be signed in to change notification settings - Fork 980
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
LibWeb: Implement navigator.deviceMemory
Fixes at least 2 subtests in wpt/device-memory.
- Loading branch information
1 parent
6189d1a
commit 69f11fc
Showing
6 changed files
with
55 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
/* | ||
* Copyright (c) 2024, Jelle Raaijmakers <[email protected]> | ||
* | ||
* SPDX-License-Identifier: BSD-2-Clause | ||
*/ | ||
|
||
#pragma once | ||
|
||
#include <AK/BuiltinWrappers.h> | ||
#include <LibCore/System.h> | ||
#include <LibWeb/WebIDL/Types.h> | ||
|
||
namespace Web::HTML { | ||
|
||
class NavigatorDeviceMemoryMixin { | ||
public: | ||
// https://www.w3.org/TR/device-memory/#computing-device-memory-value | ||
WebIDL::Double device_memory() const | ||
{ | ||
// The value is calculated by using the actual device memory in MiB then rounding it to the | ||
// nearest number where only the most signicant bit can be set and the rest are zeros | ||
// (nearest power of two). | ||
auto memory_in_bytes = Core::System::physical_memory_bytes(); | ||
auto memory_in_mib = memory_in_bytes / MiB; | ||
auto required_bits = AK::count_required_bits(memory_in_mib); | ||
auto lower_memory_in_mib = static_cast<u64>(1) << (required_bits - 1); | ||
auto upper_memory_in_mib = static_cast<u64>(1) << required_bits; | ||
auto rounded_memory_in_mib = upper_memory_in_mib - memory_in_mib <= memory_in_mib - lower_memory_in_mib | ||
? upper_memory_in_mib | ||
: lower_memory_in_mib; | ||
|
||
// Then dividing that number by 1024.0 to get the value in GiB. | ||
auto memory_in_gib = static_cast<WebIDL::Double>(rounded_memory_in_mib) / 1024.0; | ||
|
||
// An upper bound and a lower bound should be set on the list of values. | ||
return AK::clamp(memory_in_gib, 1.0, 4.0); | ||
} | ||
}; | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
// https://www.w3.org/TR/device-memory/#sec-device-memory-js-api | ||
[SecureContext, Exposed=(Window,Worker)] | ||
interface mixin NavigatorDeviceMemory { | ||
readonly attribute double deviceMemory; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters