mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-24 02:03:06 -05:00
44b2735b9e
Instead of caching start-of-line offsets, we now cache byte offsets at regular intervals. This fixes an issue where we had terrible performance on large minified JS, since that often means one very, VERY long line (with no line endings to cache). My machine was spending ~35ms per stack frame when throwing errors on some heavy minified websites, and after this patch, we now spend <1ms per stack frame.
40 lines
912 B
C++
40 lines
912 B
C++
/*
|
|
* Copyright (c) 2020, the SerenityOS developers.
|
|
* Copyright (c) 2023, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/NonnullRefPtr.h>
|
|
#include <AK/StringView.h>
|
|
#include <AK/Types.h>
|
|
#include <LibJS/Position.h>
|
|
#include <LibJS/SourceCode.h>
|
|
|
|
namespace JS {
|
|
|
|
struct SourceRange {
|
|
[[nodiscard]] bool contains(Position const& position) const { return position.offset <= end.offset && position.offset >= start.offset; }
|
|
|
|
NonnullRefPtr<SourceCode const> code;
|
|
Position start;
|
|
Position end;
|
|
|
|
DeprecatedString filename() const;
|
|
};
|
|
|
|
struct UnrealizedSourceRange {
|
|
[[nodiscard]] SourceRange realize() const
|
|
{
|
|
VERIFY(source_code);
|
|
return source_code->range_from_offsets(start_offset, end_offset);
|
|
}
|
|
|
|
RefPtr<SourceCode const> source_code;
|
|
u32 start_offset { 0 };
|
|
u32 end_offset { 0 };
|
|
};
|
|
|
|
}
|