Rendering statistics view (#3322)

Co-authored-by: Bart Louwers <bart@emeel.net>
This commit is contained in:
Adrian Cojocaru
2025-06-03 18:59:51 +03:00
committed by GitHub
parent 3c07cacc4d
commit 2a7249a3b0
81 changed files with 1271 additions and 128 deletions

View File

@@ -64,7 +64,7 @@ class MLNMapViewImpl : public mbgl::MapObserver {
void onDidFinishLoadingMap() override;
void onDidFailLoadingMap(mbgl::MapLoadError mapError, const std::string& what) override;
void onWillStartRenderingFrame() override;
void onDidFinishRenderingFrame(mbgl::MapObserver::RenderFrameStatus) override;
void onDidFinishRenderingFrame(const mbgl::MapObserver::RenderFrameStatus&) override;
void onWillStartRenderingMap() override;
void onDidFinishRenderingMap(mbgl::MapObserver::RenderMode) override;
void onDidFinishLoadingStyle() override;

View File

@@ -79,9 +79,9 @@ void MLNMapViewImpl::onWillStartRenderingFrame() {
[mapView mapViewWillStartRenderingFrame];
}
void MLNMapViewImpl::onDidFinishRenderingFrame(mbgl::MapObserver::RenderFrameStatus status) {
bool fullyRendered = status.mode == mbgl::MapObserver::RenderMode::Full;
[mapView mapViewDidFinishRenderingFrameFullyRendered:fullyRendered frameEncodingTime:status.frameEncodingTime frameRenderingTime:status.frameRenderingTime];
void MLNMapViewImpl::onDidFinishRenderingFrame(const mbgl::MapObserver::RenderFrameStatus& status) {
const bool fullyRendered = status.mode == mbgl::MapObserver::RenderMode::Full;
[mapView mapViewDidFinishRenderingFrameFullyRendered:fullyRendered renderingStats:status.renderingStats];
}
void MLNMapViewImpl::onWillStartRenderingMap() {

View File

@@ -2157,6 +2157,16 @@ vertically on the map.
*/
@property (nonatomic) MLNMapDebugMaskOptions debugMask;
/**
Returns the status of the rendering statistics overlay.
*/
- (BOOL)isRenderingStatsViewEnabled;
/**
Enable a rendering statistics overlay with ``MLNRenderingStats`` values.
*/
- (void)enableRenderingStatsView:(BOOL)value;
/**
Get the list of action journal log files from oldest to newest.

View File

@@ -68,6 +68,7 @@
#import "MLNLoggingConfiguration_Private.h"
#import "MLNNetworkConfiguration_Private.h"
#import "MLNReachability.h"
#import "MLNRenderingStats_Private.h"
#import "MLNSettings_Private.h"
#import "MLNActionJournalOptions_Private.h"
#import "MLNMapProjection.h"
@@ -495,6 +496,8 @@ public:
CFTimeInterval _frameCounterStartTime;
NSInteger _frameCount;
CFTimeInterval _frameDurations;
MLNRenderingStats* _renderingStats;
}
// MARK: - Setup & Teardown -
@@ -6913,8 +6916,7 @@ static void *windowScreenContext = &windowScreenContext;
}
- (void)mapViewDidFinishRenderingFrameFullyRendered:(BOOL)fullyRendered
frameEncodingTime:(double)frameEncodingTime
frameRenderingTime:(double)frameRenderingTime {
renderingStats:(const mbgl::gfx::RenderingStats &)stats {
if (!_mbglMap)
{
return;
@@ -6926,9 +6928,21 @@ static void *windowScreenContext = &windowScreenContext;
[self.style didChangeValueForKey:@"layers"];
}
if ([self.delegate respondsToSelector:@selector(mapViewDidFinishRenderingFrame:fullyRendered:frameEncodingTime:frameRenderingTime:)])
if ([self.delegate respondsToSelector:@selector(mapViewDidFinishRenderingFrame:fullyRendered:renderingStats:)])
{
[self.delegate mapViewDidFinishRenderingFrame:self fullyRendered:fullyRendered frameEncodingTime:frameEncodingTime frameRenderingTime:frameRenderingTime];
if (!_renderingStats) {
_renderingStats = [[MLNRenderingStats alloc] init];
}
[_renderingStats setCoreData:stats];
[self.delegate mapViewDidFinishRenderingFrame:self fullyRendered:fullyRendered renderingStats:_renderingStats];
}
else if ([self.delegate respondsToSelector:@selector(mapViewDidFinishRenderingFrame:fullyRendered:frameEncodingTime:frameRenderingTime:)])
{
[self.delegate mapViewDidFinishRenderingFrame:self
fullyRendered:fullyRendered
frameEncodingTime:stats.encodingTime
frameRenderingTime:stats.renderingTime];
}
else if ([self.delegate respondsToSelector:@selector(mapViewDidFinishRenderingFrame:fullyRendered:)])
{
@@ -7557,6 +7571,14 @@ static void *windowScreenContext = &windowScreenContext;
return _annotationViewReuseQueueByIdentifier[identifier];
}
- (BOOL)isRenderingStatsViewEnabled {
return _mbglMap->isRenderingStatsViewEnabled();
}
- (void)enableRenderingStatsView:(BOOL)value {
_mbglMap->enableRenderingStatsView(value);
}
- (void)triggerRepaint
{
_mbglMap->triggerRepaint();

View File

@@ -1,6 +1,7 @@
#import <UIKit/UIKit.h>
#import "MLNCameraChangeReason.h"
#import "MLNRenderingStats.h"
#import "MLNTileOperation.h"
#import "Mapbox.h"
@@ -267,6 +268,23 @@ NS_ASSUME_NONNULL_BEGIN
fullyRendered:(BOOL)fullyRendered
frameEncodingTime:(double)frameEncodingTime
frameRenderingTime:(double)frameRenderingTime;
/**
Tells the delegate that the map view has just redrawn.
This method is called any time the map view needs to redraw due to a change in
the viewpoint or style property transition. This method may be called very
frequently, even moreso than `-mapViewRegionIsChanging:`. Therefore, your
implementation of this method should be as lightweight as possible to avoid
affecting performance.
@param mapView The map view that has just redrawn.
@param fullyRendered A Boolean value indicating whether the map is fully rendered or not.
@param renderingStats A collection of rendering statistics
*/
- (void)mapViewDidFinishRenderingFrame:(MLNMapView *)mapView
fullyRendered:(BOOL)fullyRendered
renderingStats:(MLNRenderingStats *)renderingStats;
/**
Tells the delegate that the map view is entering an idle state, and no more
drawing will be necessary until new data is loaded or there is some interaction

View File

@@ -3,11 +3,14 @@
#import "MLNTileOperation.h"
#import "MLNUserLocationAnnotationView.h"
#include <mbgl/util/size.hpp>
namespace mbgl {
class Map;
class Renderer;
namespace gfx {
struct RenderingStats;
}
} // namespace mbgl
class MLNMapViewImpl;
@@ -39,8 +42,7 @@ FOUNDATION_EXTERN MLN_EXPORT MLNExceptionName const _Nonnull MLNUnderlyingMapUna
- (void)mapViewDidFailLoadingMapWithError:(nonnull NSError *)error;
- (void)mapViewWillStartRenderingFrame;
- (void)mapViewDidFinishRenderingFrameFullyRendered:(BOOL)fullyRendered
frameEncodingTime:(double)frameEncodingTime
frameRenderingTime:(double)frameRenderingTime;
renderingStats:(const mbgl::gfx::RenderingStats &)stats;
- (void)mapViewWillStartRenderingMap;
- (void)mapViewDidFinishRenderingMapFullyRendered:(BOOL)fullyRendered;
- (void)mapViewDidBecomeIdle;