Changeset 260412 in webkit
- Timestamp:
- Apr 20, 2020 9:06:11 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r260411 r260412 1 2020-04-20 Peng Liu <peng.liu6@apple.com> 2 3 Fix build failures when video fullscreen and picture-in-picture is disabled 4 https://bugs.webkit.org/show_bug.cgi?id=210777 5 6 Reviewed by Eric Carlson. 7 8 * Configurations/FeatureDefines.xcconfig: 9 1 10 2020-04-20 Ross Kirsling <ross.kirsling@sony.com> 2 11 -
trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig
r259762 r260412 373 373 ENABLE_VIDEO = ENABLE_VIDEO; 374 374 375 ENABLE_VIDEO_PRESENTATION_MODE = ENABLE_VIDEO_PRESENTATION_MODE; 375 ENABLE_VIDEO_PRESENTATION_MODE = $(ENABLE_VIDEO_PRESENTATION_MODE_$(WK_PLATFORM_NAME)); 376 ENABLE_VIDEO_PRESENTATION_MODE_iphoneos = ENABLE_VIDEO_PRESENTATION_MODE; 377 ENABLE_VIDEO_PRESENTATION_MODE_watchos = ENABLE_VIDEO_PRESENTATION_MODE; 378 ENABLE_VIDEO_PRESENTATION_MODE_macosx = ENABLE_VIDEO_PRESENTATION_MODE; 376 379 377 380 ENABLE_VIDEO_TRACK = ENABLE_VIDEO_TRACK; -
trunk/Source/WTF/ChangeLog
r260409 r260412 1 2020-04-20 Peng Liu <peng.liu6@apple.com> 2 3 Fix build failures when video fullscreen and picture-in-picture is disabled 4 https://bugs.webkit.org/show_bug.cgi?id=210777 5 6 Reviewed by Eric Carlson. 7 8 * wtf/PlatformEnable.h: 9 1 10 2020-04-20 Yusuke Suzuki <ysuzuki@apple.com> 2 11 -
trunk/Source/WTF/wtf/PlatformEnable.h
r260259 r260412 271 271 #endif 272 272 273 #if (PLATFORM(IOS_FAMILY) && HAVE(AVKIT)) || PLATFORM(MAC) 273 #if ((PLATFORM(IOS) || PLATFORM(WATCHOS)) && HAVE(AVKIT)) || PLATFORM(MAC) 274 #if !defined(ENABLE_VIDEO_PRESENTATION_MODE) 274 275 #define ENABLE_VIDEO_PRESENTATION_MODE 1 275 #else 276 #define ENABLE_VIDEO_PRESENTATION_MODE 0 276 #endif 277 277 #endif 278 278 -
trunk/Source/WebCore/ChangeLog
r260407 r260412 1 2020-04-20 Peng Liu <peng.liu6@apple.com> 2 3 Fix build failures when video fullscreen and picture-in-picture is disabled 4 https://bugs.webkit.org/show_bug.cgi?id=210777 5 6 Reviewed by Eric Carlson. 7 8 Wrap video fullscreen and picture-in-picture related code with "#if ENABLE(VIDEO_PRESENTATION_MODE)". 9 10 * Configurations/FeatureDefines.xcconfig: 11 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: 12 (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoLayerGravity): 13 * platform/graphics/avfoundation/objc/VideoLayerManagerObjC.h: 14 * platform/graphics/avfoundation/objc/VideoLayerManagerObjC.mm: 15 (WebCore::VideoLayerManagerObjC::setVideoLayer): 16 (WebCore::VideoLayerManagerObjC::requiresTextTrackRepresentation const): 17 (WebCore::VideoLayerManagerObjC::syncTextTrackBounds): 18 (WebCore::VideoLayerManagerObjC::setTextTrackRepresentation): 19 1 20 2020-04-20 Nikos Mouchtaris <nmouchtaris@apple.com> 2 21 -
trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig
r259762 r260412 373 373 ENABLE_VIDEO = ENABLE_VIDEO; 374 374 375 ENABLE_VIDEO_PRESENTATION_MODE = ENABLE_VIDEO_PRESENTATION_MODE; 375 ENABLE_VIDEO_PRESENTATION_MODE = $(ENABLE_VIDEO_PRESENTATION_MODE_$(WK_PLATFORM_NAME)); 376 ENABLE_VIDEO_PRESENTATION_MODE_iphoneos = ENABLE_VIDEO_PRESENTATION_MODE; 377 ENABLE_VIDEO_PRESENTATION_MODE_watchos = ENABLE_VIDEO_PRESENTATION_MODE; 378 ENABLE_VIDEO_PRESENTATION_MODE_macosx = ENABLE_VIDEO_PRESENTATION_MODE; 376 379 377 380 ENABLE_VIDEO_TRACK = ENABLE_VIDEO_TRACK; -
trunk/Source/WebCore/PAL/ChangeLog
r260366 r260412 1 2020-04-20 Peng Liu <peng.liu6@apple.com> 2 3 Fix build failures when video fullscreen and picture-in-picture is disabled 4 https://bugs.webkit.org/show_bug.cgi?id=210777 5 6 Reviewed by Eric Carlson. 7 8 * Configurations/FeatureDefines.xcconfig: 9 1 10 2020-04-20 Darin Adler <darin@apple.com> 2 11 -
trunk/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig
r259762 r260412 373 373 ENABLE_VIDEO = ENABLE_VIDEO; 374 374 375 ENABLE_VIDEO_PRESENTATION_MODE = ENABLE_VIDEO_PRESENTATION_MODE; 375 ENABLE_VIDEO_PRESENTATION_MODE = $(ENABLE_VIDEO_PRESENTATION_MODE_$(WK_PLATFORM_NAME)); 376 ENABLE_VIDEO_PRESENTATION_MODE_iphoneos = ENABLE_VIDEO_PRESENTATION_MODE; 377 ENABLE_VIDEO_PRESENTATION_MODE_watchos = ENABLE_VIDEO_PRESENTATION_MODE; 378 ENABLE_VIDEO_PRESENTATION_MODE_macosx = ENABLE_VIDEO_PRESENTATION_MODE; 376 379 377 380 ENABLE_VIDEO_TRACK = ENABLE_VIDEO_TRACK; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
r260366 r260412 1806 1806 return; 1807 1807 1808 #if ENABLE(VIDEO_PRESENTATION_MODE) 1808 1809 // Do not attempt to change the video gravity while in full screen mode. 1809 1810 // See setVideoFullscreenGravity(). 1810 1811 if (m_videoLayerManager->videoFullscreenLayer()) 1811 1812 return; 1813 #endif 1812 1814 1813 1815 [CATransaction begin]; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/VideoLayerManagerObjC.h
r256721 r260412 47 47 48 48 PlatformLayer *videoInlineLayer() const { return m_videoInlineLayer.get(); } 49 void setVideoLayer(PlatformLayer *, IntSize contentSize); 50 51 #if ENABLE(VIDEO_PRESENTATION_MODE) 49 52 PlatformLayer *videoFullscreenLayer() const { return m_videoFullscreenLayer.get(); } 50 53 FloatRect videoFullscreenFrame() const { return m_videoFullscreenFrame; } 51 52 void setVideoLayer(PlatformLayer *, IntSize contentSize);53 54 void setVideoFullscreenLayer(PlatformLayer *, WTF::Function<void()>&& completionHandler, NativeImagePtr); 54 55 void updateVideoFullscreenInlineImage(NativeImagePtr); 55 56 void setVideoFullscreenFrame(FloatRect); 57 #endif 58 56 59 void didDestroyVideoLayer(); 57 60 … … 71 74 RetainPtr<PlatformLayer> m_textTrackRepresentationLayer; 72 75 RetainPtr<WebVideoContainerLayer> m_videoInlineLayer; 76 FloatRect m_videoInlineFrame; 77 #if ENABLE(VIDEO_PRESENTATION_MODE) 73 78 RetainPtr<PlatformLayer> m_videoFullscreenLayer; 79 FloatRect m_videoFullscreenFrame; 80 #endif 74 81 RetainPtr<PlatformLayer> m_videoLayer; 75 FloatRect m_videoFullscreenFrame;76 FloatRect m_videoInlineFrame;77 82 }; 78 83 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/VideoLayerManagerObjC.mm
r260366 r260412 67 67 [m_videoInlineLayer setPlayerLayer:(AVPlayerLayer *)videoLayer]; 68 68 69 #if ENABLE(VIDEO_PRESENTATION_MODE) 69 70 if (m_videoFullscreenLayer) { 70 71 [m_videoLayer setFrame:CGRectMake(0, 0, m_videoFullscreenFrame.width(), m_videoFullscreenFrame.height())]; 71 72 [m_videoFullscreenLayer insertSublayer:m_videoLayer.get() atIndex:0]; 72 } else { 73 } else 74 #endif 75 { 73 76 [m_videoInlineLayer insertSublayer:m_videoLayer.get() atIndex:0]; 74 77 [m_videoLayer setFrame:m_videoInlineLayer.get().bounds]; 75 78 } 76 79 } 80 81 #if ENABLE(VIDEO_PRESENTATION_MODE) 77 82 78 83 void VideoLayerManagerObjC::updateVideoFullscreenInlineImage(NativeImagePtr image) … … 141 146 } 142 147 148 #endif 149 143 150 void VideoLayerManagerObjC::didDestroyVideoLayer() 144 151 { … … 153 160 bool VideoLayerManagerObjC::requiresTextTrackRepresentation() const 154 161 { 162 #if ENABLE(VIDEO_PRESENTATION_MODE) 155 163 return m_videoFullscreenLayer; 164 #else 165 return false; 166 #endif 156 167 } 157 168 158 169 void VideoLayerManagerObjC::syncTextTrackBounds() 159 170 { 171 #if ENABLE(VIDEO_PRESENTATION_MODE) 160 172 if (!m_videoFullscreenLayer || !m_textTrackRepresentationLayer) 161 173 return; … … 170 182 171 183 [CATransaction commit]; 184 #endif 172 185 } 173 186 174 187 void VideoLayerManagerObjC::setTextTrackRepresentation(TextTrackRepresentation* representation) 175 188 { 189 #if !ENABLE(VIDEO_PRESENTATION_MODE) 190 UNUSED_PARAM(representation); 191 #else 176 192 ALWAYS_LOG(LOGIDENTIFIER); 177 193 … … 196 212 197 213 [CATransaction commit]; 214 #endif 198 215 } 199 216 -
trunk/Source/WebKit/ChangeLog
r260410 r260412 1 2020-04-20 Peng Liu <peng.liu6@apple.com> 2 3 Fix build failures when video fullscreen and picture-in-picture is disabled 4 https://bugs.webkit.org/show_bug.cgi?id=210777 5 6 Reviewed by Eric Carlson. 7 8 Wrap video fullscreen and picture-in-picture related code with "#if ENABLE(VIDEO_PRESENTATION_MODE)". 9 10 * Configurations/FeatureDefines.xcconfig: 11 * GPUProcess/media/RemoteMediaPlayerProxy.cpp: 12 (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenGravity): 13 (WebKit::RemoteMediaPlayerProxy::updateVideoFullscreenInlineImage): 14 (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenMode): 15 (WebKit::RemoteMediaPlayerProxy::videoFullscreenStandbyChanged): 16 (WebKit::RemoteMediaPlayerProxy::setBufferingPolicy): 17 * GPUProcess/media/RemoteMediaPlayerProxy.h: 18 * GPUProcess/media/RemoteMediaPlayerProxy.messages.in: 19 * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm: 20 (WebKit::RemoteMediaPlayerProxy::prepareForPlayback): 21 * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp: 22 (WebKit::MediaPlayerPrivateRemote::prepareForPlayback): 23 1 24 2020-04-20 Alex Christensen <achristensen@webkit.org> 2 25 -
trunk/Source/WebKit/Configurations/FeatureDefines.xcconfig
r259762 r260412 373 373 ENABLE_VIDEO = ENABLE_VIDEO; 374 374 375 ENABLE_VIDEO_PRESENTATION_MODE = ENABLE_VIDEO_PRESENTATION_MODE; 375 ENABLE_VIDEO_PRESENTATION_MODE = $(ENABLE_VIDEO_PRESENTATION_MODE_$(WK_PLATFORM_NAME)); 376 ENABLE_VIDEO_PRESENTATION_MODE_iphoneos = ENABLE_VIDEO_PRESENTATION_MODE; 377 ENABLE_VIDEO_PRESENTATION_MODE_watchos = ENABLE_VIDEO_PRESENTATION_MODE; 378 ENABLE_VIDEO_PRESENTATION_MODE_macosx = ENABLE_VIDEO_PRESENTATION_MODE; 376 379 377 380 ENABLE_VIDEO_TRACK = ENABLE_VIDEO_TRACK; -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp
r260259 r260412 202 202 } 203 203 204 #if ENABLE(VIDEO_PRESENTATION_MODE) 204 205 void RemoteMediaPlayerProxy::setVideoFullscreenGravity(WebCore::MediaPlayerEnums::VideoGravity gravity) 205 206 { 206 #if ENABLE(VIDEO_PRESENTATION_MODE)207 207 m_player->setVideoFullscreenGravity(gravity); 208 #endif 209 } 208 } 209 #endif 210 210 211 211 void RemoteMediaPlayerProxy::acceleratedRenderingStateChanged(bool renderingCanBeAccelerated) … … 245 245 246 246 // MediaPlayerClient 247 #if ENABLE(VIDEO_PRESENTATION_MODE) 247 248 void RemoteMediaPlayerProxy::updateVideoFullscreenInlineImage() 248 249 { 249 #if ENABLE(VIDEO_PRESENTATION_MODE)250 250 m_player->updateVideoFullscreenInlineImage(); 251 #endif252 251 } 253 252 254 253 void RemoteMediaPlayerProxy::setVideoFullscreenMode(MediaPlayer::VideoFullscreenMode mode) 255 254 { 256 #if ENABLE(VIDEO_PRESENTATION_MODE)257 255 m_player->setVideoFullscreenMode(mode); 258 #endif 259 } 256 257 } 258 259 void RemoteMediaPlayerProxy::videoFullscreenStandbyChanged() 260 { 261 m_player->videoFullscreenStandbyChanged(); 262 } 263 #endif 260 264 261 265 void RemoteMediaPlayerProxy::setBufferingPolicy(MediaPlayer::BufferingPolicy policy) 262 266 { 263 267 m_player->setBufferingPolicy(policy); 264 }265 266 void RemoteMediaPlayerProxy::videoFullscreenStandbyChanged()267 {268 #if ENABLE(VIDEO_PRESENTATION_MODE)269 m_player->videoFullscreenStandbyChanged();270 #endif271 268 } 272 269 … … 678 675 } 679 676 677 #if ENABLE(VIDEO_PRESENTATION_MODE) 680 678 MediaPlayerEnums::VideoFullscreenMode RemoteMediaPlayerProxy::mediaPlayerFullscreenMode() const 681 679 { … … 689 687 return false; 690 688 } 689 #endif 691 690 692 691 bool RemoteMediaPlayerProxy::mediaPlayerShouldDisableSleep() const -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h
r258253 r260412 83 83 void invalidate(); 84 84 85 #if ENABLE(VIDEO_PRESENTATION_MODE) 85 86 void updateVideoFullscreenInlineImage(); 86 87 void setVideoFullscreenMode(WebCore::MediaPlayer::VideoFullscreenMode); 88 void videoFullscreenStandbyChanged(); 89 #endif 87 90 88 91 void setBufferingPolicy(WebCore::MediaPlayer::BufferingPolicy); 89 90 void videoFullscreenStandbyChanged();91 92 92 93 #if PLATFORM(IOS_FAMILY) … … 123 124 void setVisible(bool); 124 125 void setShouldMaintainAspectRatio(bool); 126 #if ENABLE(VIDEO_PRESENTATION_MODE) 125 127 void enterFullscreen(CompletionHandler<void()>&&); 126 128 void exitFullscreen(CompletionHandler<void()>&&); 127 129 void setVideoFullscreenGravity(WebCore::MediaPlayerEnums::VideoGravity); 130 #endif 128 131 void acceleratedRenderingStateChanged(bool); 129 132 void setShouldDisableSleep(bool); … … 136 139 #if PLATFORM(COCOA) 137 140 void setVideoInlineSizeFenced(const WebCore::IntSize&, const WTF::MachSendRight&); 141 #if ENABLE(VIDEO_PRESENTATION_MODE) 138 142 void setVideoFullscreenFrameFenced(const WebCore::FloatRect&, const WTF::MachSendRight&); 143 #endif 139 144 #endif 140 145 … … 253 258 254 259 double mediaPlayerRequestedPlaybackRate() const final; 260 #if ENABLE(VIDEO_PRESENTATION_MODE) 255 261 WebCore::MediaPlayerEnums::VideoFullscreenMode mediaPlayerFullscreenMode() const final; 256 262 bool mediaPlayerIsVideoFullscreenStandby() const final; 263 #endif 257 264 Vector<String> mediaPlayerPreferredAudioCharacteristics() const final; 258 265 … … 280 287 RefPtr<WebCore::MediaPlayer> m_player; 281 288 std::unique_ptr<LayerHostingContext> m_inlineLayerHostingContext; 289 #if ENABLE(VIDEO_PRESENTATION_MODE) 282 290 std::unique_ptr<LayerHostingContext> m_fullscreenLayerHostingContext; 291 #endif 283 292 RemoteMediaPlayerManagerProxy& m_manager; 284 293 WebCore::MediaPlayerEnums::MediaEngineIdentifier m_engineIdentifier; -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.messages.in
r258253 r260412 48 48 SetVisible(bool visible) 49 49 SetShouldMaintainAspectRatio(bool maintainAspectRatio) 50 #if ENABLE(VIDEO_PRESENTATION_MODE) 50 51 SetVideoFullscreenGravity(enum:uint8_t WebCore::MediaPlayerEnums::VideoGravity gravity) 52 #endif 51 53 AcceleratedRenderingStateChanged(bool canBeAccelerated) 52 54 SetShouldDisableSleep(bool disable) 53 55 SetRate(double rate) 54 56 57 #if ENABLE(VIDEO_PRESENTATION_MODE) 55 58 UpdateVideoFullscreenInlineImage() 56 59 SetVideoFullscreenMode(WebCore::MediaPlayer::VideoFullscreenMode mode) 57 60 VideoFullscreenStandbyChanged() 61 #endif 58 62 59 63 SetBufferingPolicy(WebCore::MediaPlayer::BufferingPolicy policy) … … 65 69 #if PLATFORM(COCOA) 66 70 SetVideoInlineSizeFenced(WebCore::IntSize size, MachSendRight machSendRight) 71 #if ENABLE(VIDEO_PRESENTATION_MODE) 67 72 SetVideoFullscreenFrameFenced(WebCore::FloatRect rect, MachSendRight machSendRight) 68 73 #endif 74 #endif 69 75 76 #if ENABLE(VIDEO_PRESENTATION_MODE) 70 77 EnterFullscreen() -> () Async 71 78 ExitFullscreen() -> () Async 79 #endif 72 80 73 81 # Paint -
trunk/Source/WebKit/GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm
r257680 r260412 46 46 if (!m_inlineLayerHostingContext) 47 47 m_inlineLayerHostingContext = LayerHostingContext::createForExternalHostingProcess(); 48 #if ENABLE(VIDEO_PRESENTATION_MODE) 48 49 if (!m_fullscreenLayerHostingContext) 49 50 m_fullscreenLayerHostingContext = LayerHostingContext::createForExternalHostingProcess(); 50 51 completionHandler(m_inlineLayerHostingContext->contextID(), m_fullscreenLayerHostingContext->contextID()); 52 #endif 51 53 } 52 54 … … 73 75 } 74 76 77 #if ENABLE(VIDEO_PRESENTATION_MODE) 75 78 void RemoteMediaPlayerProxy::enterFullscreen(CompletionHandler<void()>&& completionHandler) 76 79 { … … 94 97 m_player->setVideoFullscreenFrame(rect); 95 98 } 99 #endif 96 100 97 101 } // namespace WebKit -
trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp
r260259 r260412 130 130 131 131 m_videoInlineLayer = createVideoLayerRemote(this, inlineLayerHostingContextId.value()); 132 132 #if ENABLE(VIDEO_PRESENTATION_MODE) 133 133 m_fullscreenLayerHostingContextId = fullscreenLayerHostingContextId; 134 #endif 134 135 }, m_id); 135 136 } -
trunk/Source/WebKitLegacy/mac/ChangeLog
r260366 r260412 1 2020-04-20 Peng Liu <peng.liu6@apple.com> 2 3 Fix build failures when video fullscreen and picture-in-picture is disabled 4 https://bugs.webkit.org/show_bug.cgi?id=210777 5 6 Reviewed by Eric Carlson. 7 8 * Configurations/FeatureDefines.xcconfig: 9 1 10 2020-04-20 Darin Adler <darin@apple.com> 2 11 -
trunk/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig
r259762 r260412 373 373 ENABLE_VIDEO = ENABLE_VIDEO; 374 374 375 ENABLE_VIDEO_PRESENTATION_MODE = ENABLE_VIDEO_PRESENTATION_MODE; 375 ENABLE_VIDEO_PRESENTATION_MODE = $(ENABLE_VIDEO_PRESENTATION_MODE_$(WK_PLATFORM_NAME)); 376 ENABLE_VIDEO_PRESENTATION_MODE_iphoneos = ENABLE_VIDEO_PRESENTATION_MODE; 377 ENABLE_VIDEO_PRESENTATION_MODE_watchos = ENABLE_VIDEO_PRESENTATION_MODE; 378 ENABLE_VIDEO_PRESENTATION_MODE_macosx = ENABLE_VIDEO_PRESENTATION_MODE; 376 379 377 380 ENABLE_VIDEO_TRACK = ENABLE_VIDEO_TRACK; -
trunk/Tools/ChangeLog
r260410 r260412 1 2020-04-20 Peng Liu <peng.liu6@apple.com> 2 3 Fix build failures when video fullscreen and picture-in-picture is disabled 4 https://bugs.webkit.org/show_bug.cgi?id=210777 5 6 Reviewed by Eric Carlson. 7 8 * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: 9 1 10 2020-04-20 Alex Christensen <achristensen@webkit.org> 2 11 -
trunk/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig
r259762 r260412 373 373 ENABLE_VIDEO = ENABLE_VIDEO; 374 374 375 ENABLE_VIDEO_PRESENTATION_MODE = ENABLE_VIDEO_PRESENTATION_MODE; 375 ENABLE_VIDEO_PRESENTATION_MODE = $(ENABLE_VIDEO_PRESENTATION_MODE_$(WK_PLATFORM_NAME)); 376 ENABLE_VIDEO_PRESENTATION_MODE_iphoneos = ENABLE_VIDEO_PRESENTATION_MODE; 377 ENABLE_VIDEO_PRESENTATION_MODE_watchos = ENABLE_VIDEO_PRESENTATION_MODE; 378 ENABLE_VIDEO_PRESENTATION_MODE_macosx = ENABLE_VIDEO_PRESENTATION_MODE; 376 379 377 380 ENABLE_VIDEO_TRACK = ENABLE_VIDEO_TRACK;
Note: See TracChangeset
for help on using the changeset viewer.