From 3418f7346e38032540a8a5f0c696c65005ac740d Mon Sep 17 00:00:00 2001
From: "google-labs-jules[bot]"
<161369871+google-labs-jules[bot]@users.noreply.github.com>
Date: Fri, 30 Jan 2026 22:57:18 +0000
Subject: [PATCH 1/2] Optimize PlatformPicker with React.memo to prevent
unnecessary re-renders
Co-authored-by: xRahul <1639945+xRahul@users.noreply.github.com>
---
__tests__/PlatformPickerBenchmark.test.js | 58 +++++++++++++++++++++++
src/components/PlatformPicker.js | 2 +-
2 files changed, 59 insertions(+), 1 deletion(-)
create mode 100644 __tests__/PlatformPickerBenchmark.test.js
diff --git a/__tests__/PlatformPickerBenchmark.test.js b/__tests__/PlatformPickerBenchmark.test.js
new file mode 100644
index 0000000..c830ce3
--- /dev/null
+++ b/__tests__/PlatformPickerBenchmark.test.js
@@ -0,0 +1,58 @@
+import React from 'react';
+import renderer from 'react-test-renderer';
+import PlatformPicker from '../src/components/PlatformPicker';
+
+const mockPickerRender = jest.fn();
+
+jest.mock('react-native', () => {
+ const React = require('react');
+ const View = props => React.createElement('View', props, props.children);
+ const Text = props => React.createElement('Text', props, props.children);
+ const Picker = props => {
+ mockPickerRender();
+ return React.createElement('Picker', props, props.children);
+ };
+ Picker.Item = props => React.createElement('Picker.Item', props);
+
+ return {
+ View,
+ Text,
+ Picker,
+ StyleSheet: {
+ create: obj => obj,
+ flatten: obj => obj,
+ },
+ Platform: {
+ OS: 'ios',
+ select: obj => obj.ios,
+ }
+ };
+});
+
+describe('PlatformPicker Performance', () => {
+ test('renders repeatedly', () => {
+ mockPickerRender.mockClear();
+ const handler = () => {};
+ const selectedValue = 'mobile';
+
+ // Initial render
+ const component = renderer.create(
+
+ );
+
+ expect(mockPickerRender).toHaveBeenCalledTimes(1);
+
+ const start = Date.now();
+
+ // Update 5000 times
+ for (let i = 0; i < 5000; i++) {
+ component.update(
+
+ );
+ }
+
+ const end = Date.now();
+ console.log(`Benchmark Duration: ${end - start}ms`);
+ console.log(`Picker Render Count: ${mockPickerRender.mock.calls.length}`);
+ });
+});
diff --git a/src/components/PlatformPicker.js b/src/components/PlatformPicker.js
index ee7d28e..7ff2394 100644
--- a/src/components/PlatformPicker.js
+++ b/src/components/PlatformPicker.js
@@ -22,4 +22,4 @@ const PlatformPicker = ({selectedValue, onValueChange}) => {
);
};
-export default PlatformPicker;
+export default React.memo(PlatformPicker);
From 810441bf3f0d9807608add515c52fdf6281720f1 Mon Sep 17 00:00:00 2001
From: "google-labs-jules[bot]"
<161369871+google-labs-jules[bot]@users.noreply.github.com>
Date: Fri, 30 Jan 2026 22:59:48 +0000
Subject: [PATCH 2/2] Fix lint errors in PlatformPickerBenchmark test
Co-authored-by: xRahul <1639945+xRahul@users.noreply.github.com>
---
__tests__/PlatformPickerBenchmark.test.js | 29 +++++++++++++----------
1 file changed, 16 insertions(+), 13 deletions(-)
diff --git a/__tests__/PlatformPickerBenchmark.test.js b/__tests__/PlatformPickerBenchmark.test.js
index c830ce3..b384d35 100644
--- a/__tests__/PlatformPickerBenchmark.test.js
+++ b/__tests__/PlatformPickerBenchmark.test.js
@@ -5,27 +5,27 @@ import PlatformPicker from '../src/components/PlatformPicker';
const mockPickerRender = jest.fn();
jest.mock('react-native', () => {
- const React = require('react');
- const View = props => React.createElement('View', props, props.children);
- const Text = props => React.createElement('Text', props, props.children);
+ const ReactLib = require('react');
+ const View = props => ReactLib.createElement('View', props, props.children);
+ const Text = props => ReactLib.createElement('Text', props, props.children);
const Picker = props => {
- mockPickerRender();
- return React.createElement('Picker', props, props.children);
+ mockPickerRender();
+ return ReactLib.createElement('Picker', props, props.children);
};
- Picker.Item = props => React.createElement('Picker.Item', props);
+ Picker.Item = props => ReactLib.createElement('Picker.Item', props);
return {
View,
Text,
Picker,
StyleSheet: {
- create: obj => obj,
- flatten: obj => obj,
+ create: obj => obj,
+ flatten: obj => obj,
},
Platform: {
OS: 'ios',
select: obj => obj.ios,
- }
+ },
};
});
@@ -37,7 +37,7 @@ describe('PlatformPicker Performance', () => {
// Initial render
const component = renderer.create(
-
+ ,
);
expect(mockPickerRender).toHaveBeenCalledTimes(1);
@@ -46,9 +46,12 @@ describe('PlatformPicker Performance', () => {
// Update 5000 times
for (let i = 0; i < 5000; i++) {
- component.update(
-
- );
+ component.update(
+ ,
+ );
}
const end = Date.now();