mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Lottie experiments
This commit is contained in:
parent
032ded0817
commit
93a4e355f7
@ -18,7 +18,7 @@ CGRect getPathNativeBoundingBox(CGPathRef _Nonnull path);
|
|||||||
|
|
||||||
- (instancetype _Nullable)initWithData:(NSData * _Nonnull)data;
|
- (instancetype _Nullable)initWithData:(NSData * _Nonnull)data;
|
||||||
|
|
||||||
- (void)setFrame:(NSInteger)index;
|
- (void)setFrame:(CGFloat)index;
|
||||||
- (UIImage * _Nullable)renderForSize:(CGSize)size useReferenceRendering:(bool)useReferenceRendering canUseMoreMemory:(bool)canUseMoreMemory skipImageGeneration:(bool)skipImageGeneration;
|
- (UIImage * _Nullable)renderForSize:(CGSize)size useReferenceRendering:(bool)useReferenceRendering canUseMoreMemory:(bool)canUseMoreMemory skipImageGeneration:(bool)skipImageGeneration;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -53,8 +53,8 @@ CGRect getPathNativeBoundingBox(CGPathRef _Nonnull path) {
|
|||||||
return CGSizeMake(size.x, size.y);
|
return CGSizeMake(size.x, size.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setFrame:(NSInteger)index {
|
- (void)setFrame:(CGFloat)index {
|
||||||
_renderer->setFrame((int)index);
|
_renderer->setFrame((float)index);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (UIImage * _Nullable)renderForSize:(CGSize)size useReferenceRendering:(bool)useReferenceRendering canUseMoreMemory:(bool)canUseMoreMemory skipImageGeneration:(bool)skipImageGeneration {
|
- (UIImage * _Nullable)renderForSize:(CGSize)size useReferenceRendering:(bool)useReferenceRendering canUseMoreMemory:(bool)canUseMoreMemory skipImageGeneration:(bool)skipImageGeneration {
|
||||||
|
@ -91,7 +91,7 @@ func processDrawAnimation(baseCachePath: String, path: String, name: String, siz
|
|||||||
let referenceImageData = try! Data(contentsOf: URL(fileURLWithPath: cacheFolderPath + "/frame\(frameIndex)"))
|
let referenceImageData = try! Data(contentsOf: URL(fileURLWithPath: cacheFolderPath + "/frame\(frameIndex)"))
|
||||||
let referenceImage = decompressImageFrame(data: referenceImageData)
|
let referenceImage = decompressImageFrame(data: referenceImageData)
|
||||||
|
|
||||||
renderer.setFrame(frameIndex)
|
renderer.setFrame(CGFloat(frameIndex))
|
||||||
let image = renderer.render(for: size, useReferenceRendering: !useNonReferenceRendering, canUseMoreMemory: false, skipImageGeneration: false)!
|
let image = renderer.render(for: size, useReferenceRendering: !useNonReferenceRendering, canUseMoreMemory: false, skipImageGeneration: false)!
|
||||||
|
|
||||||
let (diffImage, deltaImage) = areImagesEqual(image, referenceImage, allowedDifference: allowedDifference)
|
let (diffImage, deltaImage) = areImagesEqual(image, referenceImage, allowedDifference: allowedDifference)
|
||||||
|
@ -152,7 +152,7 @@ private final class ManualReferenceCompareTest {
|
|||||||
let bundlePath = Bundle.main.path(forResource: "TestDataBundle", ofType: "bundle")!
|
let bundlePath = Bundle.main.path(forResource: "TestDataBundle", ofType: "bundle")!
|
||||||
self.fileList = buildAnimationFolderItems(basePath: bundlePath, path: "")
|
self.fileList = buildAnimationFolderItems(basePath: bundlePath, path: "")
|
||||||
|
|
||||||
self.renderSize = CGSize(width: 128.0, height: 128.0)
|
self.renderSize = CGSize(width: 256.0, height: 256.0)
|
||||||
|
|
||||||
self.view = view
|
self.view = view
|
||||||
self.view.backgroundColor = .white
|
self.view.backgroundColor = .white
|
||||||
@ -224,24 +224,24 @@ private final class ManualReferenceCompareTest {
|
|||||||
var animationTime = 0.0
|
var animationTime = 0.0
|
||||||
let secondsPerFrame = 1.0 / Double(renderer.framesPerSecond)
|
let secondsPerFrame = 1.0 / Double(renderer.framesPerSecond)
|
||||||
|
|
||||||
let frameDisplayLink = SharedDisplayLinkDriver.shared.add { [weak self] deltaTime in
|
let frameDisplayLink = SharedDisplayLinkDriver.shared.add(framesPerSecond: .max, { [weak self] deltaTime in
|
||||||
guard let self, let currentItem = self.currentItem else {
|
guard let self, let currentItem = self.currentItem else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var frameIndex = Int(animationTime / secondsPerFrame)
|
var frameIndex = animationTime / secondsPerFrame
|
||||||
frameIndex = frameIndex % currentItem.renderer.frameCount
|
frameIndex = frameIndex.truncatingRemainder(dividingBy: Double(currentItem.renderer.frameCount))
|
||||||
|
|
||||||
currentItem.renderer.setFrame(frameIndex)
|
currentItem.renderer.setFrame(frameIndex)
|
||||||
let image = currentItem.renderer.render(for: self.renderSize, useReferenceRendering: !self.testNonReference, canUseMoreMemory: false, skipImageGeneration: false)!
|
let image = currentItem.renderer.render(for: self.renderSize, useReferenceRendering: !self.testNonReference, canUseMoreMemory: false, skipImageGeneration: false)!
|
||||||
self.imageView.image = image
|
self.imageView.image = image
|
||||||
|
|
||||||
currentItem.referenceRenderer.setFrame(index: frameIndex)
|
currentItem.referenceRenderer.setFrame(index: Int(frameIndex))
|
||||||
let referenceImage = currentItem.referenceRenderer.makeImage(width: Int(self.renderSize.width), height: Int(self.renderSize.height))!
|
let referenceImage = currentItem.referenceRenderer.makeImage(width: Int(self.renderSize.width), height: Int(self.renderSize.height))!
|
||||||
self.referenceImageView.image = referenceImage
|
self.referenceImageView.image = referenceImage
|
||||||
|
|
||||||
animationTime += deltaTime
|
animationTime += deltaTime
|
||||||
}
|
})
|
||||||
self.frameDisplayLink = frameDisplayLink
|
self.frameDisplayLink = frameDisplayLink
|
||||||
frameDisplayLink.isPaused = false
|
frameDisplayLink.isPaused = false
|
||||||
}
|
}
|
||||||
@ -267,7 +267,7 @@ public final class ViewController: UIViewController {
|
|||||||
if #available(iOS 13.0, *) {
|
if #available(iOS 13.0, *) {
|
||||||
self.test = ReferenceCompareTest(view: self.view, testNonReference: false)
|
self.test = ReferenceCompareTest(view: self.view, testNonReference: false)
|
||||||
}
|
}
|
||||||
} else if !"".isEmpty {
|
} else if "".isEmpty {
|
||||||
if #available(iOS 13.0, *) {
|
if #available(iOS 13.0, *) {
|
||||||
self.test = ManualReferenceCompareTest(view: self.view)
|
self.test = ManualReferenceCompareTest(view: self.view)
|
||||||
}
|
}
|
||||||
@ -308,7 +308,7 @@ public final class ViewController: UIViewController {
|
|||||||
var numUpdates: Int = 0
|
var numUpdates: Int = 0
|
||||||
var frameIndex = 0
|
var frameIndex = 0
|
||||||
while true {
|
while true {
|
||||||
animationRenderer.setFrame(frameIndex)
|
animationRenderer.setFrame(CGFloat(frameIndex))
|
||||||
let _ = animationRenderer.render(for: CGSize(width: CGFloat(performanceFrameSize), height: CGFloat(performanceFrameSize)), useReferenceRendering: false, canUseMoreMemory: true, skipImageGeneration: true)
|
let _ = animationRenderer.render(for: CGSize(width: CGFloat(performanceFrameSize), height: CGFloat(performanceFrameSize)), useReferenceRendering: false, canUseMoreMemory: true, skipImageGeneration: true)
|
||||||
frameIndex = (frameIndex + 1) % animationRenderer.frameCount
|
frameIndex = (frameIndex + 1) % animationRenderer.frameCount
|
||||||
numUpdates += 1
|
numUpdates += 1
|
||||||
|
@ -3,12 +3,18 @@ load("@build_bazel_rules_apple//apple:apple.bzl",
|
|||||||
"apple_dynamic_framework_import",
|
"apple_dynamic_framework_import",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
framework_imports = select({
|
||||||
|
"@build_bazel_rules_apple//apple:ios_arm64": glob([
|
||||||
|
"device/libskia.framework/**"
|
||||||
|
]),
|
||||||
|
"//build-system:ios_sim_arm64": glob([
|
||||||
|
"simulator/libskia.framework/**"
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
apple_dynamic_framework_import(
|
apple_dynamic_framework_import(
|
||||||
name = "libskia",
|
name = "libskia",
|
||||||
framework_imports = glob([
|
framework_imports = framework_imports,
|
||||||
"libskia.framework/**"
|
|
||||||
]),
|
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 4aa40846d24842e1168375c3db79d85e913ca1e9
|
Subproject commit 2b10b84f626c66288366f0ad2d6af2a396ec454e
|
Loading…
x
Reference in New Issue
Block a user