diff --git a/ReactCommon/react/renderer/components/image/BUCK b/ReactCommon/react/renderer/components/image/BUCK index 682ea9ddb22..205771229ae 100644 --- a/ReactCommon/react/renderer/components/image/BUCK +++ b/ReactCommon/react/renderer/components/image/BUCK @@ -47,10 +47,7 @@ rn_xplat_cxx_library( tests = [":tests"], visibility = ["PUBLIC"], deps = [ - "//third-party/glog:glog", - "//xplat/fbsystrace:fbsystrace", "//xplat/folly:headers_only", - "//xplat/folly:memory", "//xplat/folly:molly", YOGA_CXX_TARGET, react_native_xplat_target("react/renderer/debug:debug"), diff --git a/ReactCommon/react/renderer/components/image/ImageShadowNode.h b/ReactCommon/react/renderer/components/image/ImageShadowNode.h index 0e60f78deef..12490840b61 100644 --- a/ReactCommon/react/renderer/components/image/ImageShadowNode.h +++ b/ReactCommon/react/renderer/components/image/ImageShadowNode.h @@ -46,7 +46,7 @@ class ImageShadowNode final : public ConcreteViewShadowNode< ShadowNodeFamilyFragment const &familyFragment, ComponentDescriptor const &componentDescriptor) { auto imageSource = ImageSource{ImageSource::Type::Invalid}; - return {imageSource, {imageSource, nullptr}, 0}; + return {imageSource, {imageSource, nullptr, nullptr}, 0}; } #pragma mark - LayoutableShadowNode diff --git a/ReactCommon/react/renderer/components/slider/BUCK b/ReactCommon/react/renderer/components/slider/BUCK index 7030c52be17..00f0df78232 100644 --- a/ReactCommon/react/renderer/components/slider/BUCK +++ b/ReactCommon/react/renderer/components/slider/BUCK @@ -80,10 +80,7 @@ rn_xplat_cxx_library( ], visibility = ["PUBLIC"], deps = [ - "//third-party/glog:glog", - "//xplat/fbsystrace:fbsystrace", "//xplat/folly:headers_only", - "//xplat/folly:memory", "//xplat/folly:molly", YOGA_CXX_TARGET, react_native_xplat_target("react/renderer/debug:debug"), diff --git a/ReactCommon/react/renderer/components/slider/SliderShadowNode.h b/ReactCommon/react/renderer/components/slider/SliderShadowNode.h index 82ab4d0b1dc..c012ff45a51 100644 --- a/ReactCommon/react/renderer/components/slider/SliderShadowNode.h +++ b/ReactCommon/react/renderer/components/slider/SliderShadowNode.h @@ -44,13 +44,13 @@ class SliderShadowNode final : public ConcreteViewShadowNode< ComponentDescriptor const &componentDescriptor) { auto imageSource = ImageSource{ImageSource::Type::Invalid}; return {imageSource, - {imageSource, nullptr}, + {imageSource, nullptr, nullptr}, imageSource, - {imageSource, nullptr}, + {imageSource, nullptr, nullptr}, imageSource, - {imageSource, nullptr}, + {imageSource, nullptr, nullptr}, imageSource, - {imageSource, nullptr}}; + {imageSource, nullptr, nullptr}}; } #pragma mark - LayoutableShadowNode diff --git a/ReactCommon/react/renderer/imagemanager/BUCK b/ReactCommon/react/renderer/imagemanager/BUCK index 9ea98791449..a9797d2884b 100644 --- a/ReactCommon/react/renderer/imagemanager/BUCK +++ b/ReactCommon/react/renderer/imagemanager/BUCK @@ -103,10 +103,7 @@ rn_xplat_cxx_library( tests = [":tests"], visibility = ["PUBLIC"], deps = [ - "//third-party/glog:glog", - "//xplat/fbsystrace:fbsystrace", "//xplat/folly:headers_only", - "//xplat/folly:memory", "//xplat/folly:molly", YOGA_CXX_TARGET, react_native_xplat_target("react/renderer/core:core"), diff --git a/ReactCommon/react/renderer/imagemanager/ImageRequest.h b/ReactCommon/react/renderer/imagemanager/ImageRequest.h index 8c5dc8d5fe8..9666b634cab 100644 --- a/ReactCommon/react/renderer/imagemanager/ImageRequest.h +++ b/ReactCommon/react/renderer/imagemanager/ImageRequest.h @@ -11,6 +11,7 @@ #include #include #include +#include #include namespace facebook { @@ -30,6 +31,7 @@ class ImageRequest final { */ ImageRequest( const ImageSource &imageSource, + std::shared_ptr telemetry, std::shared_ptr instrumentation); /* @@ -63,6 +65,12 @@ class ImageRequest final { */ const ImageResponseObserverCoordinator &getObserverCoordinator() const; + /* + * Returns stored image telemetry object as a shared pointer. + * Retain this *or* `ImageRequest` to ensure a correct lifetime of the object. + */ + const std::shared_ptr &getSharedTelemetry() const; + /* * Returns stored image instrumentation object as a shared pointer. * Retain this *or* `ImageRequest` to ensure a correct lifetime of the object. @@ -83,6 +91,11 @@ class ImageRequest final { */ ImageSource imageSource_; + /* + * Image telemetry associated with the request. + */ + std::shared_ptr telemetry_{}; + /* * Event coordinator associated with the reqest. */ diff --git a/ReactCommon/react/renderer/imagemanager/ImageTelemetry.cpp b/ReactCommon/react/renderer/imagemanager/ImageTelemetry.cpp new file mode 100644 index 00000000000..7dbc06c2cbf --- /dev/null +++ b/ReactCommon/react/renderer/imagemanager/ImageTelemetry.cpp @@ -0,0 +1,26 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "ImageTelemetry.h" + +namespace facebook { +namespace react { + +SurfaceId ImageTelemetry::getSurfaceId() const { + return surfaceId_; +} + +std::string ImageTelemetry::getLoaderModuleName() const { + return loaderModuleName_; +} + +void ImageTelemetry::setLoaderModuleName(std::string const &loaderModuleName) { + loaderModuleName_ = loaderModuleName; +} + +} // namespace react +} // namespace facebook diff --git a/ReactCommon/react/renderer/imagemanager/ImageTelemetry.h b/ReactCommon/react/renderer/imagemanager/ImageTelemetry.h new file mode 100644 index 00000000000..551ca314d33 --- /dev/null +++ b/ReactCommon/react/renderer/imagemanager/ImageTelemetry.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include + +namespace facebook { +namespace react { + +/* + * Represents telemetry data associated with a image request + */ +class ImageTelemetry final { + public: + ImageTelemetry(SurfaceId const surfaceId) : surfaceId_(surfaceId) {} + + SurfaceId getSurfaceId() const; + std::string getLoaderModuleName() const; + void setLoaderModuleName(std::string const &loaderModuleName); + + private: + const SurfaceId surfaceId_; + std::string loaderModuleName_{""}; +}; + +} // namespace react +} // namespace facebook diff --git a/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageManager.cpp b/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageManager.cpp index 245c3b5e7a7..c1d4d1ac63e 100644 --- a/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageManager.cpp +++ b/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageManager.cpp @@ -24,7 +24,7 @@ ImageRequest ImageManager::requestImage( const ImageSource &imageSource, SurfaceId surfaceId) const { // Not implemented. - return ImageRequest(imageSource, nullptr); + return ImageRequest(imageSource, nullptr, nullptr); } } // namespace react diff --git a/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageRequest.cpp b/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageRequest.cpp index 35475d10831..9cdbc7fdd0d 100644 --- a/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageRequest.cpp +++ b/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageRequest.cpp @@ -12,14 +12,19 @@ namespace react { ImageRequest::ImageRequest( const ImageSource &imageSource, + std::shared_ptr telemetry, std::shared_ptr instrumentation) - : imageSource_(imageSource), instrumentation_(instrumentation) { + : imageSource_(imageSource), + telemetry_(telemetry), + instrumentation_(instrumentation) { // Not implemented. } ImageRequest::ImageRequest(ImageRequest &&other) noexcept : imageSource_(std::move(other.imageSource_)), - coordinator_(std::move(other.coordinator_)) { + telemetry_(std::move(other.telemetry_)), + coordinator_(std::move(other.coordinator_)), + instrumentation_(std::move(other.instrumentation_)) { // Not implemented. } diff --git a/ReactCommon/react/renderer/imagemanager/platform/ios/ImageRequest.cpp b/ReactCommon/react/renderer/imagemanager/platform/ios/ImageRequest.cpp index 96911824679..216e1ffdfd9 100644 --- a/ReactCommon/react/renderer/imagemanager/platform/ios/ImageRequest.cpp +++ b/ReactCommon/react/renderer/imagemanager/platform/ios/ImageRequest.cpp @@ -12,18 +12,23 @@ namespace react { ImageRequest::ImageRequest( const ImageSource &imageSource, + std::shared_ptr telemetry, std::shared_ptr instrumentation) - : imageSource_(imageSource), instrumentation_(instrumentation) { + : imageSource_(imageSource), + telemetry_(telemetry), + instrumentation_(instrumentation) { coordinator_ = std::make_shared(); } ImageRequest::ImageRequest(ImageRequest &&other) noexcept : imageSource_(std::move(other.imageSource_)), + telemetry_(std::move(other.telemetry_)), coordinator_(std::move(other.coordinator_)), instrumentation_(std::move(other.instrumentation_)) { other.moved_ = true; other.coordinator_ = nullptr; other.cancelRequest_ = nullptr; + other.telemetry_ = nullptr; other.instrumentation_ = nullptr; } @@ -38,6 +43,11 @@ void ImageRequest::setCancelationFunction( cancelRequest_ = cancelationFunction; } +const std::shared_ptr &ImageRequest::getSharedTelemetry() + const { + return telemetry_; +} + const ImageResponseObserverCoordinator &ImageRequest::getObserverCoordinator() const { return *coordinator_; diff --git a/ReactCommon/react/renderer/imagemanager/platform/ios/RCTImageManager.mm b/ReactCommon/react/renderer/imagemanager/platform/ios/RCTImageManager.mm index 9ad64c68fd2..eb2e6ff51b1 100644 --- a/ReactCommon/react/renderer/imagemanager/platform/ios/RCTImageManager.mm +++ b/ReactCommon/react/renderer/imagemanager/platform/ios/RCTImageManager.mm @@ -42,7 +42,8 @@ using namespace facebook::react; SystraceSection s("RCTImageManager::requestImage"); auto imageInstrumentation = std::make_shared(_imageLoader); - auto imageRequest = ImageRequest(imageSource, imageInstrumentation); + auto telemetry = std::make_shared(surfaceId); + auto imageRequest = ImageRequest(imageSource, telemetry, imageInstrumentation); auto weakObserverCoordinator = (std::weak_ptr)imageRequest.getSharedObserverCoordinator(); diff --git a/ReactCommon/react/renderer/imagemanager/platform/ios/RCTSyncImageManager.mm b/ReactCommon/react/renderer/imagemanager/platform/ios/RCTSyncImageManager.mm index 6f8c54d492c..c4e2deb8d5c 100644 --- a/ReactCommon/react/renderer/imagemanager/platform/ios/RCTSyncImageManager.mm +++ b/ReactCommon/react/renderer/imagemanager/platform/ios/RCTSyncImageManager.mm @@ -36,7 +36,8 @@ using namespace facebook::react; - (ImageRequest)requestImage:(ImageSource)imageSource surfaceId:(SurfaceId)surfaceId { - auto imageRequest = ImageRequest(imageSource, nullptr); + auto telemetry = std::make_shared(surfaceId); + auto imageRequest = ImageRequest(imageSource, telemetry, nullptr); auto weakObserverCoordinator = (std::weak_ptr)imageRequest.getSharedObserverCoordinator();