diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..53c0059 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +0.1.5 +----- + +- Use [posix-spawn](https://github.com/rtomayko/posix-spawn) to instead of Kernel#exec to get better performance. + > fork(2) calls slow down as the parent process uses more memory due to the need to copy page tables. diff --git a/letter_avatar.gemspec b/letter_avatar.gemspec index 19aba99..bf6b83e 100644 --- a/letter_avatar.gemspec +++ b/letter_avatar.gemspec @@ -20,6 +20,8 @@ Gem::Specification.new do |spec| spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] + spec.add_dependency 'posix-spawn', '>= 0.3.0' + spec.add_development_dependency "bundler", "~> 1.3" spec.add_development_dependency "rake" end diff --git a/lib/letter_avatar/avatar.rb b/lib/letter_avatar/avatar.rb index d82f018..6558cc2 100644 --- a/lib/letter_avatar/avatar.rb +++ b/lib/letter_avatar/avatar.rb @@ -12,6 +12,8 @@ module LetterAvatar FILL_COLOR = 'rgba(255, 255, 255, 0.65)'.freeze + FONT_FILENAME = File.join(File.expand_path("../../", File.dirname(__FILE__)), "Roboto-Medium") + class << self class Identity @@ -64,21 +66,30 @@ module LetterAvatar color = identity.color letter = identity.letter + filename = fullsize_path(identity) - instructions = %W{ + commands = %W( + convert -size 240x240 xc:#{to_rgb(color)} -pointsize 140 - -font Roboto-Medium + -font #{FONT_FILENAME} -weight 500 -fill '#{FILL_COLOR}' -gravity Center -annotate -0+10 '#{letter}' '#{filename}' - } + ) - `convert #{instructions.join(" ")}` + command = commands.join(' ') + + pid, stdin, stdout, stderr = POSIX::Spawn.popen4(command) + Process.waitpid(pid) + err = stderr.read + if err != nil && err.length > 0 + raise "letter_avatar error: #{err.strip}" + end filename end diff --git a/lib/letter_avatar/version.rb b/lib/letter_avatar/version.rb index c073277..f5cc922 100644 --- a/lib/letter_avatar/version.rb +++ b/lib/letter_avatar/version.rb @@ -1,3 +1,3 @@ module LetterAvatar - VERSION = "0.1.4" + VERSION = "0.1.5" end -- libgit2 0.21.0