Photoshop a résolu le problème des fichiers trop volumineux pour tenir en mémoire

Découvrez comment Adobe a permis aux utilisateurs de modifier même les fichiers les plus volumineux sur la version Web de son célèbre application Photoshop.

Nabeel Al-Shamma
Nabeel Al-Shamma

Introduction

(Cet article est également disponible sous forme de vidéo).

En 2021, Adobe et les ingénieurs Chrome ont lancé une version de Photoshop sur le Web. Le logiciel utilise WebAssembly de manière innovante avec des fonctionnalités telles que SIMD, le stockage hautes performances dans le système de fichiers privé d'origine, l'espace colorimétrique P3 pour le canevas et les composants Web avec Lit. Dans cet article, nous souhaitons nous concentrer sur la façon dont les ingénieurs d'Adobe Photoshop ont résolu le travail avec des fichiers plus volumineux que la mémoire. Et, dans le cas de WebAssembly, comment Photoshop fonctionne avec des fichiers plus volumineux que l'espace d'adressage 32 bits de Wasm32.

L'application Photoshop lors de la modification d'une image du logo de Project Fugu.

Problème

L'ouverture d'un fichier pour le modifier nécessite une grande quantité de mémoire, bien plus que l'ouverture d'un fichier pour le consulter. Les fichiers modifiés dans Photoshop nécessitent souvent plus de mémoire que celle dont dispose un utilisateur sur son appareil, en raison des nombreuses fonctionnalités proposées par le logiciel, des types de conception et de retouche numériques pour lesquels il est utilisé et des capacités des appareils des utilisateurs.

Le format de fichier Photoshop stocke les données avec une compression sans perte. Lorsqu'un fichier ou un document est lu, toutes les données d'image sont décompressées pour un traitement plus efficace. Par conséquent, la quantité de mémoire requise peut être plusieurs fois supérieure à l'espace utilisé par un document sur le disque ou dans le stockage cloud.

Photoshop est compatible avec un très grand historique d'annulation. Dans Photoshop, on appelle souvent des opérations destructives. En d'autres termes, si vous effectuez une modification avec un pinceau, par exemple, vous obtiendrez de nouvelles données de pixels qui peuvent être aussi volumineuses que les données de pixels d'origine. Effectuer ces modifications au cours d'une longue session d'édition génère de grandes quantités de données de pixels qui doivent être conservées pour permettre les opérations d'annulation. Ainsi, l'historique peut atteindre plusieurs centaines de mégaoctets, voire plusieurs gigaoctets de données.

Les appareils et les plates-formes (ordinateurs de bureau, appareils mobiles ou navigateurs) gèrent tous la mémoire. Certains sont plus généreux que d'autres en termes de quantité de mémoire mise à la disposition des applications. La quantité de mémoire varie également d'un appareil à l'autre, comme vous le savez lorsque vous commandez un nouvel ordinateur ou appareil et spécifiez la quantité de mémoire vive (RAM) souhaitée. Nombre de ces plates-formes sont également compatibles avec la mémoire virtuelle, ce qui permet à une application d'utiliser plus de mémoire que ce qui est physiquement disponible. Cette prise en charge varie selon le système d'exploitation et l'environnement d'exécution. Comme dans le cas de WebAssembly, il se peut que les applications ne puissent pas être facilement accessibles ou utilisables par les applications. De plus, les systèmes virtuels modernes ont des limites supérieures qui sont facilement dépassées par les exigences de Photoshop.

Idéalement, les applications utiliseraient autant de mémoire que nécessaire. Cela leur permet généralement d'offrir les meilleures performances à leurs utilisateurs. Toutefois, s'ils utilisent trop de mémoire, ils peuvent être pénalisés par la plate-forme d'exécution ou manquer de mémoire, entraînant des échecs.

Pour rappel, le problème initial que Photoshop devait résoudre consistait à modifier des fichiers avec une résolution d'impression dans les premières versions de macOS, à partir de 1 Mo pour le système d'exploitation et toutes les applications. Une image pleine page de 300 ppp au format CMJN fait environ 32 Mo une fois décompressée.

Solution

Pour résoudre le problème du dépassement de la quantité de RAM disponible par l'application, Photoshop a implémenté un système de mémoire virtuelle (VM) logiciel. Photoshop utilise sa VM pour gérer les données des documents, en particulier les données d'image, l'historique et l'état des annulations, ainsi que l'espace de stockage pour la commande en cours. Il est également utilisé pour mettre en cache de grands blocs de données, tels que des descriptions de pinceau, afin qu'ils n'aient besoin d'être sérialisés à partir du disque qu'une seule fois.

Comme exemple des aspects gérés par la VM, les données d'image sont stockées à l'aide d'une représentation mipmap, c'est-à-dire un ensemble pyramidal de tuiles qui fournissent des données d'image dans une plage de résolutions basse à élevée. Photoshop peut ainsi fonctionner sur les données de résolution appropriées pour obtenir une réponse plus rapide lors d'un zoom avant ou arrière, plutôt qu'en cas de zoom arrière.

Exemple de stockage d'images mipmap: l'image principale à gauche est accompagnée de copies filtrées de taille réduite.

Lors de l'initialisation de l'application, Photoshop détermine la quantité de RAM disponible. Il réserve une partie pour les données à stocker dans la VM. La RAM restante est disponible pour d'autres besoins de l'application via la bibliothèque d'exécution C++ standard. La mémoire de la VM est divisée en pages. Chaque page est généralement un multiple de la taille de la page matérielle de l'appareil. Lorsqu'elle est utilisée pour des données d'image, la mémoire est référencée sous forme de tuiles. Une tuile est une aire carrée de pixels d'un calque comprenant des limites géométriques. Une carte consomme une ou plusieurs pages.

Photoshop crée un ou plusieurs fichiers de travail pour fournir une sauvegarde sur disque pour les pages de VM. Ces fichiers de travail sont stockés dans le système de fichiers privé d'origine. La capture d'écran montre une hiérarchie d'exemples d'un fichier de travail (en surbrillance en jaune) et d'autres fichiers au cours d'une session d'édition d'image. Chaque fichier de travail peut contenir plusieurs pages de VM. Lorsque la VM a besoin d'être sauvegardée, elle crée des fichiers de travail supplémentaires. À mesure que des pages sont libérées, leur espace dans un fichier brouillon peut être réutilisé pour de nouvelles pages.

Inspecter la hiérarchie de fichiers du système de fichiers privé d'origine de Photoshop avec l'extension Chrome OPFS Explorer

Lors du traitement des données d'image, Photoshop parcourt les tuiles en effectuant des calculs de pixels. Chaque calcul peut faire référence à plusieurs vignettes. La VM doit s'assurer que les tuiles source et de destination pour l'itération actuelle sont en mémoire, en les chargeant à partir de zéro si nécessaire. En parallèle, il peut vider les pages dans les fichiers de travail pour libérer de l'espace en mémoire.

Conclusions

Bien que les détails concrets de l'implémentation de la VM dépassent largement le cadre de ce document (et appartiennent également à Adobe), la description détaillée de la solution vous aide à comprendre comment Photoshop peut traiter les fichiers volumineux. Le système de fichiers privés d'origine, qui offre un accès en lecture et en écriture aux fichiers hautement performant, est un composant clé de la solution.

Remerciements

Cet article de blog a été examiné par Oliver Unter Ecker et Rachel Andrew. Nous remercions Russell Williams pour sa excellente documentation sur la VM Photoshop.